2016-03-22 52 views
0

我有一個包含564個變量的sas數據集。我需要創建一個帶有三列的新表,column1將是變量名稱,column2將是該變量的值,並且column3將是觀察編號。 因此,如果我有變量性別,則性別將在變量列中列出2次,並且性別值將在第一行中列爲m,在第二行中列爲女性,並且列3將只是觀察。這是它應該看起來的樣子。提前謝謝了。將proc freq輸出轉換爲數據集

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

未來,通過提供樣本數據和您用於運行頻率的代碼,可以更好地解決這類問題。 – Joe

回答

1

有一列中所有值得到一個表出來的PROC FREQ的關鍵是ods outputcoalescec結合。

ODS OUTPUT讓你告訴PROC FREQ把所有東西放到一個數據集中(而不是out=,它只是將一個頻率表放到一個數據集中)。這給了你一個稍微凌亂的結果,然後我們使用coalescec來修復。該函數獲取變量列表並返回它們的第一個非缺失值;由於F_變量總是隻填充一個值(表格中變量的格式化值),所以使用它們很容易。

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; 

上面提到的其餘部分對於該數據集來說是微不足道的。

+0

喬......你是個天才......很多人很感謝。 – user601828