data step

Hallo zusammen,

ich habe folgendes Problem:

Ein Datensatz mit den Variablen 'name' und 'nr' soll so geändert werden, dass jeder Wert von 'name' genau zweimal in der neuen Tabelle vorkommt. Kommt in der Ursprungstablle der Wert mehr als zweimal vor, sollen diese Zeilen gelöscht werden. Kommt der Wert nur einmal vor, soll eine Zeile mit Missing Value eingefügt werden. Hier ein vorher-nachher-Beispiel:

data vorher;
input name$ nr;
cards;
A 3
A 4
A 7
B 2
C 4
C 5
run;

data nachher;
input name$ nr;
cards;
A 3
A 4
B 2
B .
C 4
C 5
run;

Weiß jemand eine Lösung für dieses Problem?

Viele Grüße,
Barbara

vorher-nachher

Hallo Barbara,

folgendermaßen sollte es funtionieren, falls die Ausprägungen von nr irrelevant sind:


proc sort data=vorher;
by name;
run;

data nachher(drop=n);
set vorher;
by name;
if first.name then do;
  n=
0; /* Zählvariable */
end;
n+
1;
if n <= 2; /* maximal 2 pro Name */
output;
if last.name and n<2 then do;
  nr=
.; /* Falls ein Name nur einmal vorkommt nr=. */
  
output;
end;
run;

Das proc sort braucht man in diesem Falle nicht, da der Dataset "vorher" schon bei der Erstellung sortiert ist.

Funktioniert...

...prima! first./last. kannte ich bislang nicht, das kann ich bestimmt noch öfter anwenden.

Vielen Dank!
Barbara Sarholz