2016-11-14 8 views
0

Ich habe einen Datensatz, wieWie kann ich diesen Datensatz manipulieren, um eine neue Spalte zu erhalten?

ID retailer  
1 A    
2 A    
1 B    
3 C     
3 B     

Was aussieht würde Ich mag ein Datum mit einer Spalte für jeden einzelnen Einzelhändler gesetzt ist, das anzeigt, ob die ID mit dem Händler (so etwas wie ein boolean täte gut) zugeordnet ist.

Ich könnte dies manuell mit proc sql tun, aber das verallgemeinert nicht gut, wenn ich viele Händler habe.

Gibt es trotzdem eine Pivot-Tabelle mit SAS zu erstellen? Ich weiß, proc tabulate kann etwas ähnliches tun, aber ich brauche die Ausgabe für weitere Berechnungen.

Desired output: 

ID A B C  
1 1 1 0 
2 1 0 0 
3 0 1 1 

Antwort

1

SAS kann nicht wirklich von Pivot-Tabellen tun, aber man kann sicherlich Ihre Zeilen für Spalten tauschen die Transponierung procecure mit - wie folgt:

data have; 
input ID $ retailer $ ; 
retain count 1; /* NOTE - this bit is necessary to have in your source */ 
datalines; 
1 A    
2 A    
1 B    
3 C     
3 B 
; 
run; 

/* sort to enable transpose */ 
proc sort; by id;run; 

/* transpose data */ 
proc transpose data=have out=want (drop=_name_); 
    by id; 
    id retailer; 
run; 

/* turn missings into zeros */ 
proc stdize data=want reponly missing=0; 
run; 

example result

+0

Danke für die Antwort. Wenn ich den Code für meine Daten ausführe, gibt der proc transpose eine leere Tabelle zurück. Irgendeine Idee warum das sein könnte? –

+0

erhalten Sie Warnungen oder Fehler im Protokoll? Vielleicht eine neue Sitzung starten. Wenn Sie Fehler hatten, wird manchmal das System "Option Obs" auf Null gesetzt. Der Code funktioniert mit den bereitgestellten Beispieldaten. Hast du deine Eingabetabelle nach ID sortiert? –

+0

Keine Fehler im Protokoll. Begann eine neue Sitzung, noch leere Tabelle. Ja, ich habe die Eingabetabelle nach ID sortiert. –

Verwandte Themen