0
我試圖用特定的方式組織一個數據集,其中包含一系列變化的變量。我遇到的問題是,我並不總是知道我將在數據集中使用的實際變量數量。我之前在變量列表是靜態的數據語句之後使用PROC SQL
語句或RETAIN
語句完成此操作。SAS/SQL動態訂購變量
我的數據是這樣的:
APPNUM DATE REASON1 REASON2 REASON3 REASON4 NAME1 NAME2 NAME3 NAME4
123 1/1/2017 X Y Z A Jon Mary Tom Suzie
我希望它看起來像這樣:
APPNUM DATE REASON1 NAME1 REASON2 NAME2 etc
123 1/1/2017 X Jon Y Mary etc
這會很容易與SQL或保留聲明。但是,我正在使用循環等將這些變量拉到一起,並且呈現的變量數量取決於我的輸入數據。有些日子裏可能有20個REASON/NAME實例,其他的可能有1個。
我嘗試了下面的代碼來拉取變量名稱列表,然後命令APPNUM,DATE,然後最後按變量名稱的最後一位進行排序。 I.E. 1,1,2,2,3,3 - 但我沒有成功。該列表被正確存儲 - 沒有錯誤,但是在解析VARLIST的值時。他們沒有按預期訂購。有沒有人試過並完成過這個?
PROC SQL;
SELECT NAME INTO :VARLIST SEPARATED BY ','
FROM DICTIONARY.COLUMNS
WHERE LIBNAME = 'WORK'
AND MEMNAME = 'SFINAL'
ORDER BY NAME, SUBSTR(NAME,LENGTH(NAME)-1);
QUIT;
上面的代碼會爲了這樣的事情:
APPNUM, DATE, NAME1...2...3..., REASON1...2...3...
,而不是:
APPNUM, DATE, NAME1, REASON1, NAME2, REASON2....
爲什麼ORDER BY向後?另外,我的SUBSTR沒有錯。你可以簡單地做一個長度 - N,SAS從那一點到這個字符串的其餘部分。 I.E. '數據測試; 長度$ 3; 輸入一個; datalines; abc ; 跑; proc sql; 創建表格新爲 select substr(a,length(a)-0)as a1 from test; quit; proc print data = new;運行;' 產生'c',但現在我解釋說,對於我自己,這仍然不支持1和2位數字 – DukeLuke
您想要按數字和名稱排序。否則,首先將所有名稱分組,首先按照數字排序。嘗試上面的代碼,它會按照您的要求進行操作。 – DomPazz