2016-06-19 28 views
0

我想從SAS表中檢索行級別值(與帳號關聯的貸款) - 請查找下面的示例。SAS從行中檢索值

enter image description here

輸入

Account Number Loans 
123    abc, def, ghi 
456    jkl, mnopqr, stuv 
789    w, xyz 

輸出

Account Numbers Loans 
123    abc 
123    def 
123    ghi 
456    jkl 
456    mnopqr 
456    stuv 
789    w 
789    xyz 

貸款由逗號分隔和它們不具有固定的長度。

+0

的可能的複製[SAS移調逗號分隔場(http://stackoverflow.com/questions/28358093/sas-transpose-comma-separated-field) – Reeza

回答

1

使用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; 
+0

太感謝你了,COUNT周和掃描功能做工作 – user3681328

+0

請讓我知道如果我想扭轉這個過程? – user3681328

+0

接受或投票我的答案將有所幫助。 –