2016-08-07 8 views
1

Ich lese viel über die erste. und zuletzt. Funktion und grundlegende Berechnungen in SAS, obwohl ich das folgende Problem in der Datenpaste umgehen möchte (wenn möglich):SAS-Berechnungen in Datastep

Ich muss jede Beobachtung markieren, die das 25. Perzentil in jeder Richtung überschreitet. I.e. Ich möchte Ausreißer berechnen und gebe ihnen entweder eine 1 oder 0 (Ausreißer oder nicht). Das Problem, das ich habe, ist, dass ich es für eine Gruppe/Klasse von Beobachtungen im Datensatz machen möchte.

Group Value OutlierFlag 
a 1  1 
a 10 0 
a 11 0 
a 400 1 
b 2  0 
b 2  0 
b 500 1 

Um/advance zu komplizieren: Ich brauche eine Zeit-Raster hinzuzufügen, die bedeutet, dass ich alle Beobachtungen in jeder Minute summieren müssen und den Wert auf eine Art Gitter aufschreiben (die aktuellen Beobachtungen sind nicht in bestimmten Zeitintervallen). Ich habe das Raster bereits produziert (Minutenschritte). Aber wie kann ich Beobachtungen zusammenfassen und sie in jede Minute in den Gitterdaten aufnehmen? Es tut mir leid, wenn das zu verschwommen ist, aber vielleicht weiß einer von euch, wie man das macht oder hat eine Idee. Ich bin sehr dankbar!

Am besten!

EDIT:

Okay, ich getestet:

proc means data = MM.Data median P25 P75; 
class Security; 
ods output Summary=mm.Data_median; 
var price spread; run; 

data mm.data; set mm.Data_median; 
run; 

, dass im Grunde gibt mir die Proc bedeutet Ausgang. Aber ich möchte, dass das ursprüngliche Dataset mit den Variablen p25 und p75 gefüllt wird. Dann habe ich versucht:

proc sql; 
create table mm.newData as select *, sum(spread) as sumspread 
from mm.Data 
group by RIC; quit; 

Aber es zunächst Gruppen erneut und dann gibt es keine P25-Funktion (I Summe für Probe Gründen nur eingegeben).

+0

Bitte nach, was Sie versucht haben. First/Last ist für diese Frage nicht geeignet, die Verwendung von BY-Gruppen ist jedoch höchstwahrscheinlich erforderlich. Ohne ein gutes Datensample, die erwartete Ausgabe und das, was Sie versucht haben, raten wir zu viele Dinge. – Reeza

+0

Hallo Reeza, danke für die Antwort. Nun, ich habe Proc SQL versucht, aber anscheinend gibt es keine P25 oder ähnliche Funktion. Dann versuchte ich Proc Means mit P25 und P75, aber es kollabiert die Daten, die ich nicht will. - Kann ich die Ausgabe von Proc means an den ursprünglichen Datensatz anhängen und die Werte abrufen, die ich für Berechnungen benötige? – MaBo88

+0

Bitte posten Sie, was Sie in Frage gestellt haben. Wenn Sie SAS 9.4 haben, kann es Quantilfunktionen unterstützen. Sonst bedeutet proc, dass dies der übliche Weg ist. – Reeza

Antwort

3
  • Hinzufügen STACKODEN & NWAY Optionen zu Proc bedeutet. Dieser berechnet nur bei höchste Stufe (dh nur auf Gruppenebene) und hält Daten weit.
  • Merge sich mit der BY-Gruppe

    proc means data=sashelp.class nway stackods median p25 p75; 
        class sex; 
        var weight; 
        ods output summary=stats; 
    run; 
    
    proc sort data=sashelp.class out=class; 
        by sex; 
    
    data want; 
        merge class stats (keep=sex median p25 p75); 
        by sex; 
        flag_p75=ifn(weight>p75, 1, 0); 
    run; 
    
+0

Super, vielen Dank !! Funktioniert wie ein Zauber und NWAY und STACKODS sind so nützlich – MaBo88