感觉你的结果有点不对啊,以b中第一条为例,08-07-05,他的最大日期也就是8号,你怎么得到了10号的数据呢?
我的想法是补全b的数据,根据你的日期差,如果是150天的话,那前后就是301条,如果b表有2万条,则有600万左右。
然后a表是200万,两边数据量差不多,merge起来也不会很慢。你可以试试咯。
%let dur=3;
data b1;
set b(rename=(date=date1));
do i=-&dur to &dur;
date=intnx('day',date1,i);
output;
end;
format date yymmdd10.;
*drop i date1 ;
run;
proc sort data=b1;
by id date;
run;
data c;
merge a(in=in1) b1(in=in2);
by id date;
if in1 and in2 then output;
run;
proc sort data=c;
by id company date;
run;
proc sql;
create table c as
select distinct a.*,b.company
from a , b
where ( b.Date -3 le a.Date le b.Date+3)
and a.id=b.id
order by id, company,Date
;
quit;
proc sql;
create table c as
select distinct a.*,b.company
from a , b
where ( b.Date -3 le a.Date le b.Date+3)
and a.id=b.id
order by id, company,Date
;
quit;