2016-07-01 2 views
-1

ähnlichSAS Dataset - für jede Änderung in variablen Inkrementwert zuordnen - sortiert nach Zeitstempel

How to assign an ID to a group of variables

My-Datensatz nach ID sortiert, dann Zeitstempel. Ich muss eine Variable 'order' erstellen, die bei jeder Änderung in shinest Status erhöht wird, aber meine Sortierung muss Zeitstempel bleiben, also denke ich, dass ich richtigerweise andeute, dass by (Gruppe) nicht funktionieren wird. Die Reihenfolge Feld unten zeigt, was ich suche ...

ID Status Timestamp Order 
188 3  12:15  1 
188 4  12:45  2 
188 4  13:10  2 
188 3  14:20  3 
189 10  11:00  1 
189 11  13:00  2 
189 10  13:30  3 
189 10  13:35  3 

Die erste und die zweite ‚3s sind getrennt, ebenso die ersten und nachfolgenden‘ 10 Jahre.

Antwort

0

Wie Sie erwähnt haben, ist es sehr ähnlich zu dieser anderen Frage. Der Trick dabei ist, die Reihenfolge der ersten Beobachtung in jeder Gruppe auf Null zu setzen.

data temp; 
    input ID $ Status $ Timestamp $; 
    datalines; 
    188 3 12:15 
    188 4 12:45 
    188 4 13:10 
    188 3 14:20 
    189 10 11:00 
    189 11 13:00 
    189 10 13:30 
    189 10 13:35 
    ; 
run; 

data temp2; 
    set temp; 
    by id; 
     if first.id then order = 0; 
     if status ~= lag(status) then order + 1; 
run; 
+0

Fantastisch !! ...Vielen Dank – endastory

1

Sie können mit der Option NOTSORTED SAS automatisch die FIRST.STATUS Flagge für Sie festgelegt haben.

data want ; 
    set have ; 
    by id status notsorted; 
    if first.id then order=0; 
    order + first.status; 
run;