2017-07-14 1 views
0

IIDごとに複数の日付があり、グループ内でmax(多分最小限)を探しています不足している。次のテストデータましょう:SAS proc sqlグループ内の不足/不足の中で最小/最大を見つけよう

data test; 
    informat EFF_DATE END_DATE date9.; 
    length IID $12 EFF_DATE END_DATE 8; 
    input IID $ EFF_DATE END_DATE; 
    format EFF_DATE END_DATE date9.; 
    datalines; 
    A 11MAY15 . 
    A 12SEP13 01JAN15 
    A 13DEC12 . 
    B 25AUG14 . 
    B 13JUN17 01JAN15 
    B 03NOV13 . 
    ; 
run; 

を私の計画はIIDで最大EFF_DATEを計算するには、次のコードをオフに構築することですが、END_DATEは私がsqlでこのロジックを追加する方法を見つけ出すことができない不足している場合のみです。

proc sql noprint; 
    create table test_fill as 
    select *, 
     max(EFF_DATE) /* add something here? */ as MOST_RECENT_EFF_DATE format=date9. 
    from test group by IID; 
quit; 

以下は、所望の出力を示していますIID = Bの場合

IID EFF_DATE END_DATE MOST_RECENT_EFF_DATE 
A 11MAY15  .   11MAY15 
A 12SEP13  01JAN15  11MAY15 
A 13DEC12  .   11MAY15 
B 25AUG14  .   25AUG14 
B 13JUN17  01JAN15  25AUG14 
B 03NOV13  .   25AUG14 

を、13JUN17はEND_DATEはとても非欠落しているため、我々はそれを受け入れることができない最大の日付であっても、私は次を取る必要があります最高の日付。可能であれば、私はデータの束を書いて後でマージすることができると確信していますが、私はそれをノックアウトしようとします。sql

答えて

3

あなたは(今までmaxではなく、またそれはminある)elseビーイングヌルとmax関数内caseなどの条件が含まれます。

proc sql noprint; 
    create table test_fill as 
    select *, 
     max(case when missing(end_Date) then EFF_DATE else . end) as MOST_RECENT_EFF_DATE format=date9. 
    from test group by IID; 
quit; 
+0

ありがとう@Joe - 私が探しているものです。ネストされた 'case when'ステートメントは、私のロジックが進んでいくのに役立ちます! – Foxer