SAS帮助:我有一个下表如下:我希望impdate列中的最新值填充到id1的dataIwant列中。 id2只是为了表明id1可以与创建多个行的多个id2相关。
我尝试按id1,日期对数据进行排序,然后使用不起作用的keep语句。
data want;
date have;
by id1 date;
retain dataiwant;
if impdate then do;
dataiwant = impdate;
end;
else do;
if missing(impdate) then do;
impdate = dataiwant;
end;date id1 id2 impdate
我拥有的数据:
date id1 id2 impdate
31Dec2018 1 7A 31Aug2017
31Dec2018 1 8A 31Aug2017
31Dec2018 1 9A 31Aug2017
31Jan2019 1 7A 31Aug2017
31Jan2019 1 8A 31Aug2017
31Jan2019 1 9A 31Aug2017
28Feb2019 1 7A 1Mar2019
28Feb2019 1 8A 1Mar2019
28Feb2019 1 9A 1Mar2019
31Dec2018 2 81A 9Sep2018
31Dec2018 2 82B 9Sep2018
31Jan2019 2 81A 9Sep2018
31Jan2019 2 82B 9Sep2018
28Feb2019 2 81A 1Feb2019
28Feb2019 2 82B 1Feb2019
31Jan2019 3 66A .
31Jan2019 3 66B .
28Feb2019 3 66A .
28Feb2019 3 66B .
我想要的数据:
date id1 id2 impdate DataIwant
31Dec2018 1 7A 31Aug2017 1Mar2019
31Dec2018 1 8A 31Aug2017 1Mar2019
31Dec2018 1 9A 31Aug2017 1Mar2019
31Jan2019 1 7A 31Aug2017 1Mar2019
31Jan2019 1 8A 31Aug2017 1Mar2019
31Jan2019 1 9A 31Aug2017 1Mar2019
28Feb2019 1 7A 1Mar2019 1Mar2019
28Feb2019 1 8A 1Mar2019 1Mar2019
28Feb2019 1 9A 1Mar2019 1Mar2019
31Dec2018 2 81A 9Sep2018 1Feb2019
31Dec2018 2 82B 9Sep2018 1Feb2019
31Jan2019 2 81A 9Sep2018 1Feb2019
31Jan2019 2 82B 9Sep2018 1Feb2019
28Feb2019 2 81A 1Feb2019 1Feb2019
28Feb2019 2 82B 1Feb2019 1Feb2019
31Jan2019 3 66A . .
31Jan2019 3 66B . .
28Feb2019 3 66A . .
28Feb2019 3 66B . .
答案 0 :(得分:0)
这应该是基于id1列的具有相同表的简单联接
data have;
input date date9. id1 id2$ impdate date9.;
format date impdate date9.;
datalines;
31Dec2018 1 7A 31Aug2017
31Dec2018 1 8A 31Aug2017
31Dec2018 1 9A 31Aug2017
31Jan2019 1 7A 31Aug2017
31Jan2019 1 8A 31Aug2017
31Jan2019 1 9A 31Aug2017
28Feb2019 1 7A 1Mar2019
28Feb2019 1 8A 1Mar2019
28Feb2019 1 9A 1Mar2019
31Dec2018 2 81A 9Sep2018
31Dec2018 2 82B 9Sep2018
31Jan2019 2 81A 9Sep2018
31Jan2019 2 82B 9Sep2018
28Feb2019 2 81A 1Feb2019
28Feb2019 2 82B 1Feb2019
31Jan2019 3 66A .
31Jan2019 3 66B .
28Feb2019 3 66A .
28Feb2019 3 66B .
;
run;
proc sql;
select a.*,b.dateiwant
from have a
left join (select id1,
max(impdate) as dateiwant format=date9.
from have
group by id1) b
on a.id1=b.id1;
quit;