2017-02-14 8 views
0

使用して別の日付に従って日付を入力します。IDDate1Date2を。 Date2に基づいて列Date1を記入する必要があります。つまり、Date1が古い場合はDate2となり、Date1の値は同じになります。私は3私のデータセット内の列持つSAS

ID |Date1  | Date2 
84 |   |13JAN2015 
84 |12NOV2014 |05FEB2015 
84 |12NOV2014 |07FEB2015 
106 |   |13JAN2015 
106 |09MAY2014 |05FEB2015 
106 |09MAY2014 |07FEB2015 
106 |09MAY2014 |09MAR2015 
153 |16JAN2015 |08OCT2015 
153 |16JAN2015 |12NOV2015 
155 |   |13JAN2015 
155 |01JUN2014 |05FEB2015 
155 |25APR2015 |12NOV2015 
155 |25APR2015 |28NOV2015 

そして、私はこの結果を得るためにしたい:

私の元のデータがある

ID |Date1  | Date2 
84 |12NOV2014 |13JAN2015 
84 |12NOV2014 |05FEB2015 
84 |12NOV2014 |07FEB2015 
106 |09MAY2014 |13JAN2015 
106 |09MAY2014 |05FEB2015 
106 |09MAY2014 |07FEB2015 
106 |09MAY2014 |09MAR2015 
153 |16JAN2015 |08OCT2015 
153 |16JAN2015 |12NOV2015 
155 |01JUN2014 |13JAN2015 
155 |01JUN2014 |05FEB2015 
155 |25APR2015 |12NOV2015 
155 |25APR2015 |28NOV2015 

Date1と仮定すると、誕生日とDate2は、収集情報の日付、だったすべての情報です出生後に収集されたID(同じIDの場合)は同じ生年月日に属している必要があります。

私はIFステートメントを使用しようとしたが、それはうまくいきませんでした。 誰かが私を助けることができますか?

+0

最初のレコードで、 'Date1 =" "'を '' Date1 = "12/nov/14" 'にするにはどうすればよいですか?あなたが話していないものがあるか、その例が間違っています。 –

+0

Date1を生年月日、Date2を収集情報日付とすると、出生後(同じIDの場合)に収集されたすべての情報は、同じIDに属している必要があります生年月日、空白を埋める。 – Mayara

+0

ここで使用している日付形式の名前はありますか? –

答えて

0

データステップループ内の前のレコードの値を読み取ることができるlag()関数を使用できます。

data have; 
    infile datalines delimiter='|'; 
    length Date1$10 Date2$10; 
    input ID Date1 $ Date2 $; 
    datalines; 
84 |   |13JAN2015 
84 |12NOV2014 |05FEB2015 
84 |12NOV2014 |07FEB2015 
106 |   |13JAN2015 
106 |09MAY2014 |05FEB2015 
106 |09MAY2014 |07FEB2015 
106 |09MAY2014 |09MAR2015 
153 |16JAN2015 |08OCT2015 
153 |16JAN2015 |12NOV2015 
155 |   |13JAN2015 
155 |01JUN2014 |05FEB2015 
155 |25APR2015 |12NOV2015 
155 |25APR2015 |28NOV2015 
; 
run; 

*** convert to dates; 
data have; 
    set have; 
    format d2 d1 Date9.; 
    *Date1 = COMPRESS(tranwrd(Date1,'/',''),,'s'); 
    d1 = input(Date1,Date9.); 
    *Date2 = COMPRESS(tranwrd(Date2,'/',''),,'s'); 
    d2 = input(Date2,Date9.); 
    rename d1=Date1 d2=Date2; 
    drop Date1 Date2; 
    run; 

*** sort; 
proc sort data=have out=want; 
    by id descending Date2; 
    run;quit; 

*** if missing then fill in previous value; 
data want; 
    set want; 
    lagDate1=lag(Date1); 
    if Date1=. then Date1=lagDate1; 
    drop lagDate1; 
    run; 

*** sort back to normal; 
proc sort data=want; 
    by id Date2; 
    run;quit; 
  1. ソートデータ
  2. かの並べ替え正常に戻っ

にあなたはIDがあることを確認するためにルールを追加したい場合があり、前の値

  • をコピー行方不明日付をコピーする前の前のレコードと同じです。

  • 関連する問題