我每IID
有多个日期,如果缺少另一个变量,我希望在仅组中找到最大值(可能是最小值)。获取以下测试数据:
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;
我的计划是构建以下代码,以便按EFF_DATE
计算最大IID
,但仅当END_DATE
丢失时我无法弄清楚如何在{sql
中添加此逻辑{1}}。
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 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
对于IID = B,即使13JUN17是最大日期,我们也无法接受,因为END_DATE不会丢失,所以我需要采取下一个最高日期。我确信我可以编写一堆数据步骤并合并回去,但如果可能的话,我想尝试在sql
中删除它。
答案 0 :(得分:3)
您在case
函数中包含max
条件,else
为空(永远不是max
,也不是min
)。
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;