2012-04-06 13 views
-2

Ich weiß, dass es ähnliche Fragen in Bezug auf Seriennummern gibt, aber mein Fall ist ein wenig anders. Ich muss die Seriennummer basierend auf der Gruppenvariablen zuweisen. Jetzt habe ich meine Daten nach der Gruppenvariablen sortiert. Die folgenden Daten sind nur ein Teil des gesamten Datensatzes. Im Grunde möchte ich eine "serial_num" Variable erstellen, die der Gruppe eine eindeutige Seriennummer zuweist, wie unten gezeigt.SAS: Seriennummer zuweisen basierend auf der Gruppe

Zum Beispiel, wenn Gruppe = 1, jede hat eigene eindeutige Seriennummer. Wenn Gruppe = 2, gibt es zwei identische Seriennummern. Ich hoffe, ihr bekommt das Muster, indem ihr die unten stehenden Daten beachtet.

Vielen Dank im Voraus.

serial_num group 
---------------- 
1   1 
2   1 
.   . 
.   . 
.   . 
7   2 
7   2 
8   2 
8   2 
.   . 
.   . 
.   .  
10   3 
10   3 
10   3 
11   3 
11   3 
11   3 
.   . 
.   . 
.   . 

Antwort

3

Eine seltsame Anforderung, aber hier ist eine Lösung mit einfachen alten Daten Schritt.

data output; 
    set input; 
    by group; 
    if first.group or c = group then do; 
     c = 0; 
     serial_num + 1; 
    end; 
    c + 1; 

    drop c; 
run; 
1

Eine grobe Lösung mit IML. Hauptsächlich um mit Ihnen zu überprüfen, ob es dem Muster entspricht, das Sie dann wünschen, kann ich es nötigenfalls erweitern, um Dateneingabe zu ermöglichen oder Verbesserung zu machen.

Hinweis: y ist der generierte Seriennummernvektor.

proc iml; 
x={1,1,2,2,2,2,3,3,3,3,3,3,4,4,4,4,4,4,4,4}; 
y=j(nrow(x),1,.); 

y[1,1]=1; 
j=1; 
do i=2 to nrow(y); 
    if y[i-x[i,1],1]=j then do; 
     j=j+1; 
     y[i,1]=j; 
    end; 
    else if x[i,1]^=x[i-1,1] then y[i,1]=y[i-1,1]+1; 
    else y[i,1]=y[i-1,1]; 
end; 
print y; 
quit; 
+1

Um die Effizienz zu verbessern, können Sie den UNIQUE-LOC-Trick oder die UNIQUEBY-Funktion verwenden. Zum Beispiel, siehe http://blogs.sas.com/content/iml/2011/11/07/an-efficient-alternative-to-the-unique-loc-technique/ – Rick

+0

@Rick Thanks. Das ist eine gute Lektüre. –

+0

Danke! Nun, es gibt ein kleines Problem. Es gibt vier verschiedene Gruppen (1 bis 4) und ich habe 500.000 Beobachtungen. – Ken

Verwandte Themen