2017-06-16 107 views
1

我有一個包含三個變量的數據集:應用程序編號,拒絕代碼和序列。現在,單個應用程序可能會有多個拒絕代碼(它們將具有不同的序列號)。因此,數據看起來像以下:將長轉換爲寬而不丟失SAS中的值

Application No  Decline Code  Sequence 

1234      FG    1 
1234      FK    3 
1234      AF    2 
1256      AF    2 
1256      FK    1 
. 
. 
. 
. 

等等

所以,我必須把這個寬幅使得第一列包含唯一應用程序編號和對應於每個人是自己的衰落碼(我不需要順序號,只是順序號從左到右依次以逗號分隔)。下面

Application Number   Decline Code 
1234       FG, AF, FK 
1256       FK, AF 
.......... 
......... 

等等

現在,我試圖通過應用數量上的SAS破壞PROC置喜歡的東西。但問題是,它會創建多個列,列出所有拒絕代碼,然後如果某個拒絕代碼不適用於應用程序,它將顯示。在那裏面。所以他們有許多缺失的價值,這不是我期待的格式。有沒有辦法在SAS或SQL中做到這一點?

回答

2

PROC TRANSPOSE當然可以在這裏幫助;那麼你可以CATX變量在一起,如果你真的只是想一個變量:

data have; 
input ApplicationNo  DeclineCode $ Sequence ; 
datalines; 
1234      FG    1 
1234      FK    3 
1234      AF    2 
1256      AF    2 
1256      FK    1 
;;;; 
run; 
proc sort data=have; 
    by ApplicationNo Sequence; 
run; 
proc transpose data=have out=want_pre; 
    by ApplicationNo; 
    var DeclineCode; 
run; 

data want; 
    set want_pre; 
    length decline_codes $1024; 
    decline_codes = catx(', ',of col:); 
    keep ApplicationNo decline_codes; 
run; 

你也可以在一個datastep做到這一點平凡,使用firstlast檢查。

data want_ds; 
    set have; 
    by ApplicationNo Sequence; 
    retain decline_codes; 
    length decline_codes $1024; *or whatever you need; 
    if first.ApplicationNo then call missing(decline_codes); 
    decline_codes = catx(',',decline_codes, DeclineCode); 
    if last.ApplicationNo then output; 
run; 
相關問題