2017-03-03 34 views
0

Ich habe ein SAS-Dataset, wobei jede Zeile einen Kontakt zu einem Arzt für eine bestimmte Person ID darstellt. Jede ID hat eine andere Anzahl von Kontakten (zB Zeilen). Mein Datensatz sieht folgendermaßen aus.SAS: Konvertieren eines Datensatzes aus Zeilen in Spalten

enter image description here

Was ich tun möchte, ist mit einem Datensatz am Ende, die wie folgt aussieht

enter image description here

, die für jede eindeutige ID ist, ich will einen Datensatz haben, wo ich Spalten erstellen für jede Kontaktnummer (NUMMER) und was diese Art von Kontakt ist (CONTACT_TYPE), und die Spalten sollten basierend auf der Anzahl der Kontakte benannt werden. Ich möchte auch, dass der Code Spalten basierend auf der ID mit der größten Anzahl von Kontakten (MAX) automatisch erzeugt, d. H. NUMMER & MAX sollte meine letzte Spalte sein.

ich haben versucht, irgendwie die Zahl in eine Makro-Variable ‚Name‘ zu konvertieren und dann versucht, irgendwie

% lassen name = NUMBER

und verwendet dann diese in einem datastep wie etwas zu tun

NUMMER & Name. = CONTACT_TYPE

in einem Datenschritt. Dies hat jedoch bei mir nicht funktioniert und ist höchstwahrscheinlich sehr ineffizient, vermute ich.

Kann mir jemand in die richtige Richtung zeigen, um das zu lösen?

Vielen Dank im Voraus für Ihre Zeit.

Grüße Alexander

+0

Das nächste Mal die Daten als Text in der Frage. Bevorzugt in Form eines Datenschrittes. – Tom

Antwort

1

Dies wird mit PROC TRANSPOSE erreicht.

Zuerst erstellen wir eine Spalte mit dem neuen Spaltennamen.

data temp; 
set have; 
_name_ = catt("NUMBER",number); 
run; 

Sortieren Sie die Daten, wenn dies nicht bereits der Fall ist. Überspringen, wenn die Daten sortiert sind.

proc sort data=temp; 
by id number; 
run; 

laufen Dann

proc transpose data=temp out=want; 
by id; 
var CONTACT_TYPE; 
id _NAME_; 
run; 
+0

Vielen Dank. Das war genau das, wonach ich suchte. – AGK1991

2

Diese Art von Problem transponieren ist genau das, was PROC TRANSPOSE zu handhaben ausgelegt ist.

proc transpose data=have out=want prefix=NUMBER ; 
    by id; 
    id number ; 
    var contact_type; 
run;