2016-10-19 5 views
0

SAS EGにデータセットがあります:他の変数の条件に基づいてSASデータセット変数を変更する

ID |日付|名前
ABC1 | 31MAR2016 |テキスト1
ABC1 | 30JUN2016 |テキスト2
ABC2 | 31MAR2016 |テキスト3
ABC2 | 30JUN2016 | Text4

私は理想的なデータステップを使用して、このデータセットを変換したい:

ID |日付|名前
ABC1 | 31MAR2016 |テキスト2
ABC1 | 30JUN2016 |テキスト2
ABC2 | 31MAR2016 |テキスト4
ABC2 | 30JUN2016 |テキスト4

最新の日付に対応する名前を選択して、IDが一致したときに最も早い日付に名前を置き換えることができます。

ご協力いただきありがとうございます。

+0

私はデータステップでDOループを使用しようとしましたが、おそらくルックアップのようなより効率的な方法があるかどうか疑問に思っていました。 – sonarclick

答えて

1

1)データをソートすると、最も早いレコードが各IDグループの最初になります。

2)グループ処理を使用すると、各グループの最初のレコードを除くすべてのレコードが変更されます。

3)並べ替えて元のシーケンスに戻します。

proc sort data=source out=source_sorted; 
    by id descending date; 
run; 

data result; 
    set source_sorted; 
    by id; 
    length name_tmp $10; 
    retain name_tmp ""; 

    if first.id then 
     name_tmp = name; 

    name = name_tmp; 

    drop name_tmp; 
run; 

proc sort data=result; 
    by id date; 
run; 
+0

素晴らしい!ありがとう。 LENGTHのname_tmp $ 1000を追加するだけでした。なぜならそれは名前の最初の文字を返すだけだったからです。 – sonarclick

関連する問題