使用countw()
來計算一行上的值的數量,並且scan()
將它們選出。
兩者都有最後一個可選變量來指定分隔符,在你的情況下,它是,
。
data Loans (keep= AccountNo Loan);
infile datalines truncover;
Input @1 AccountNo 3. @17 LoanList $250.;
if length(LoanList) gt 240 then put 'WARNING: You might need to extend Loans';
label AccountNo = 'Account Number' Loan = 'Loans';
do loanNo = 1 to countw(LoanList, ',');
Loan = scan(LoanList, loanNo, ',');
output;
end;
datalines;
123 abc, def, ghi
456 jkl, mnopqr, stuv
789 w, xyz
;
proc print data=Loans label noobs;
run;
反向操作需要不同的技術。
要啓用by AccountNo
處理,我們必須首先從輸入構建SAS數據集,然後使用set
語句重新讀取。
data Loans;
infile datalines;
input @1 AccountNo 3. @5 Loan $25.;
datalines;
123 15-abc
123 15-def
123 15-ghi
456 99-jkl
456 99-mnopqr
456 99-stuv
789 77-w
789 77-xyz
;
data LoanLists;
set Loans;
by AccountNo;
現在創建您的Loanlist足夠長的時間,並覆蓋SAS的默認行爲重新初始化所有變量對每個觀測(=數據行)。
format Loanlist $250.;
retain Loanlist;
收集所有貸款帳戶,但要用逗號的空白分離。
if first.AccountNo then Loanlist = Loan;
else Loanlist = catx(', ',Loanlist,Loan);
if length(LoanList) gt 240 then put 'WARNING: you might need to extend LoanList';
僅保留每個帳戶的完整列表。
if last.AccountNo;
drop Loan;
proc print;
run;
的可能的複製[SAS移調逗號分隔場(http://stackoverflow.com/questions/28358093/sas-transpose-comma-separated-field) – Reeza