2016-03-22 11 views
0

Ich habe einen SAS-Datensatz mit 564 Variablen. Ich muss eine neue Tabelle mit drei Spalten erstellen, Spalte1 wird der Name der Variablen, Spalte2 wird der Wert dieser Variablen sein, und Spalte3 wird Beobachtungsnummer sein. Wenn ich also ein variables Geschlecht habe, dann wird das Geschlecht in der Variablenspalte zweimal aufgeführt, und die Geschlechterwerte werden in der ersten Zeile als m und in der zweiten Zeile als weiblich aufgeführt, und die Spalte3 ist nur die Nummer der Überwachung. So sollte es aussehen. Vielen Dank im Voraus.Converting proc freq output in einen Datensatz

var value obs 
gender m  1 
gender f  2 
ans yes 3 
ans no  4 
+0

In Zukunft wird diese Art von Frage besser gestellt, indem Sie Beispieldaten und den Code angeben, mit dem Sie Frequenzen auf ihm ausführen. – Joe

Antwort

1

Der Schlüssel eine Tabelle aus PROC FREQ zu bekommen, die alle Werte in einer Spalte wird ods output mit coalescec kombiniert.

ODS OUTPUT können Sie sagen, PROC FREQ, alles in einen Datensatz (im Gegensatz zu out=, die nur eine Freq-Tabelle in einen Datensatz setzt). Das gibt Ihnen ein etwas unordentliches Ergebnis, das wir dann verwenden coalescec zu beheben. Diese Funktion nimmt eine Liste von Variablen und gibt von ihnen den ersten nicht fehlenden Wert zurück; Da die Variablen F_ immer nur einen Wert enthalten (den formatierten Wert der Variablen in der Tabelle), ist es einfach, sie zu verwenden.

ods output onewayfreqs=freqs; 
proc freq data=sashelp.class; 
    tables age sex; 
run; 
ods output close; *technically unneeded but makes it more clear; 

data want; 
    set freqs; 
    value = left(coalescec(of f_:)); 
run; 

Der Rest von dem, was Sie oben zu beachten ist, aus diesem Dataset trivial.

+0

Joe ... du bist ein sas Genie ... vielen vielen Dank. – user601828