2016-08-01 9 views
-6

Bitte kann mir jemand helfen das folgende Problem.finden Sie die Anzahl der Num Spalte ändern durch ID

Ich habe folgende Dummy-Daten:

id num 
1 1 
1 2 
1 1 
1 2 
1 1 
1 2 
2 1 
2 15 
2 1 
2 1 
2 1 
2 15 
2 1 
2 15 

Wie Anzahl der Male num (Spalte) zählen, für jede ID ändert sich? Finden Sie die Ergebnisse und neue Spalte. Ich brauche Ergebnisse wie diese

id number no_of_times 
1 1  1 
1 2  1 
1 1  1 
1 2  2 
1 1  1 
1 2  3 
2 1  1 
2 15  1 
2 1  1 
2 1  1 
2 1  1 
2 15  2 
2 1  1 
2 15  3 

Hoffe, dass Sie die Ergebnisse, nachdem er

+1

Von der Probendaten, die Sie habe zur Verfügung gestellt, es ist nicht klar, welche Logik Sie verwenden möchten. Bitte könnten Sie das in Worten erklären? – user667489

+0

Warum geht no_of_times nicht "1 2 1" für die ersten 3 Beobachtungen in Ihrem Beispiel? – superfluous

+0

Hallo Hier ist es wie hinten und vorwärts her. 1 ist zurück und 2 ist her wir müssen nur noch zählen, wie oft es geht. Jede ID: so, wenn es zunächst 1 bis 2 bedeutet, dass kein Mal 1 für 1 und 2 für 1 ändern, wenn es (1) 1 Das heißt, keine Änderung nach hinten geht, sondern Wert 1 wenn es geht nochmal 1 bis 2 das bedeutet zweites mal geht es her (2) also wert 1 für 1 und 2 für 2 wenn es nach hinten geht (1) 1 bedeutet das keine änderung aber wert ist 1 wenn es geht wieder 1 bis 2, das heißt, das zweite Mal geht es nach vorne (2) so Wert 1 für 1 und 2 für 3 hoffe, es ergibt Sinn. Danke – Ramu

Antwort

0

Die folgende Hash-Ansatz für die Testdaten arbeitet verstehen sich mit der Frage zu finden:

data have; 
input id number no_of_times_target; 
cards; 
1 1  1 
1 2  1 
1 1  1 
1 2  2 
1 1  1 
1 2  3 
2 1  1 
2 15  1 
2 1  1 
2 1  1 
2 1  1 
2 15  2 
2 1  1 
2 15  3 
; 
run; 

data want; 
    set have; 
    by id; 
    if _n_ = 1 then do; 
    length prev_number no_of_times 8; 
    declare hash h(); 
    rc = h.definekey('number','prev_number'); 
    rc = h.definedata('no_of_times'); 
    rc = h.definedone(); 
    end; 
    prev_number = lag(number); 
    if number > prev_number and not(first.id) then do; 
    rc = h.find(); 
    no_of_times = sum(no_of_times,1); 
    rc = h.replace(); 
    end; 
    else no_of_times = 1; 
    if last.id then rc = h.clear(); 
    drop rc prev_number; 
run; 
Verwandte Themen