sunjiangwei 发表于 2016-12-16 13:46
如果是医院的数据的话,很容易出现这种Card_id 不唯一的情况,因为一个病人可以有很多条记录(比如CT, X ...
merge 也能做 但是 有点勉强
data t1;
input card_id $ test_time yymmdd10.;
format test_time yymmddn8.;
cards;
a 20111011
b 20120506
b 20120607
d 20110503
d 20120105
;
run;
data t2;
input card_id $ start_date : yymmdd10. end_date : yymmdd10. status $;
cards;
a 20110102 20110501 aa
b 20120403 20120709 aa
b 20130101 20130401 bb
d 20110401 20110506 cc
d 20120101 20120131 dd
;
run;
proc sort data=t1;by card_id;run;
proc sort data=t2;by card_id;run;
data t2_;
set t2;
by card_id;
retain cc;
if first.card_id then cc=1;
else cc+1;
run;
proc sort data=t2_ out=t2_1(keep=cc);by descending cc;run;
%macro jj(out);
data a&out.;
merge t2_(where=(cc=&out.)) t1;
by card_id;
if start_date<=test_time<=end_date;
run;
%mend jj;
%jj(1);
%jj(2);
data final;
set a1-a2;
run;