2016-12-08 9 views
1

Der Versuch, es zu googeln und konnte nicht gefunden werden (vielleicht ist es mir, das ist völlig noob).SAS loop von varaible

Ich möchte eine neue Variable in meinem Datensatz namens Schritt, die von 1 bis customerid ändert sich ändern.

Beispiel: Das ist der Tisch bekam ich:

Customerid Page  step 
1   Frontpage 
1   Middlepage 
2   Frontpage 
2   Middlepage 
2   Lastpage  
3   Frontpage 
3   Middlepage 

Was ich will:

Customerid Page  step 
1   Frontpage 1 
1   Middlepage 2 
2   Frontpage 1 
2   Middlepage 2 
2   Lastpage 3 
3   Frontpage 1 
3   Middlepage 2 

Was ich jetzt:

Customerid Page step 
1 Frontpage 1 
1 Middlepage 2 
2 Frontpage 3 
2 Middlepage 4 
2 Lastpage 5 
3 Frontpage 6 
3 Middlepage 7 

Ich habe versucht, dies zu tun in sas, aber es hat nicht funktioniert:

data nordea_dk1; 
set nordea_dk; 
by custerimd; 
if first.customerid then do; 
step=1; 
step + 1; 
output; 
run; 
+0

Stellen Sie sicher, dass die neue Variable 'STEP' nicht bereits in Ihrem Eingabedatensatz vorhanden ist. Dies verhindert, dass die Werte beibehalten werden. – Tom

+0

Es ist nicht, es war nur für das Beispiel, aber immer noch nicht funktioniert –

+0

Geben Sie Beispieldaten, die das Problem zeigt. – Tom

Antwort

1

Überprüfen Sie Ihr SAS-Protokoll auf Hinweise oder Fehler. Die Grundlogik funktioniert für Ihre Testdaten.

data have ; 
input Customerid Page $20. ; 
cards; 
1 Frontpage 
1 Middlepage 
2 Frontpage 
2 Middlepage 
2 Lastpage 
3 Frontpage 
3 Middlepage 
; 

data want ; 
    set have ; 
    by customerid ; 
    if first.customerid then step=0; 
    step+1; 
run; 
+0

Ich bekomme das auch, wenn ich deinen Code benutze. Liegt es daran, dass die Kundennummer im Real-Dataset eine Textzeichenfolge ist? –

+0

Nr. ERSTE. Flags ist es egal, ob die Variable numerisch oder ein Zeichen ist. – Tom

+0

mit Ihrer Hilfe finde ich das Problem! Ich habe die Variable customerid auf den Namen: 'Besucher ID ' n Dann habe ich es nur auf ID geändert, es funktioniert wie ein Charme aus irgendeinem Grund: S. –

0

Ein paar syntaktische Elemente, es gibt einen Schreibfehler auf custerimd, und die do ist nicht erforderlich. Auch die output wird in diesem Fall nicht benötigt, da sie auch am Ende des Datenschritts ausgegeben wird.

In Bezug auf die Programmlogik müssen Sie den Schritt auf first.customerid zurücksetzen und zusätzliche Werte inkrementieren, daher ist ein anderer Fall erforderlich. Dies sollte das sein, wonach Sie suchen:

data nordea_dk1; 
    set nordea_dk; 
    by customerid; 

    if first.customerid then 
     step=1; 
    else 
     step+1; 

run;  
+0

Dann tue ich, dass es nur jede Beobachtung zählt. Die Anzahl wird nicht durch die Variable customerid gruppiert? Ich möchte, dass es auf 1 zurückgesetzt wird, wenn es zu einer neuen eindeutigen ID in der Variablen customerid kommt. –

+0

Vielleicht sollte ich erwähnen, dass die customerid eine Textvariable ist, weiß nicht, ob das irgendwelche Auswirkungen hat? –

+0

Es sollte egal sein, ob es sich um eine Textvariable handelt, ist das Dataset sortiert? – pieceOpiland