2017-06-16 9 views
1

私は、アプリケーション番号、拒否コード、シーケンスという3つの変数を持つデータセットを持っています。現在では、1つのアプリケーションに複数の拒否コード(シーケンス番号が異なる)が存在する可能性があります。だから、データは次のようになります。だから、SASで値が抜けていない状態でlongからwideに変換

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ここでは確かに役に立ちます。あなたはまた、firstlastチェックを使用して、1 datastepに自明これを行うことができます

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; 

:あなたは本当にただ一つの変数をしたい場合は、あなたが一緒に変数をCATXすることができます。

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; 
関連する問題