上述数据只是一个简单的例子,实际数据a大概有近200万条数据,表b有近20000条记录,根据不同情况,可能需要取date前后150天的数据。作者: shiyiming 时间: 2011-6-20 16:50 标题: Re: 再次请教从两个表提取数据的问题 感觉你的结果有点不对啊,以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;作者: shiyiming 时间: 2011-6-21 16:42 标题: Re: 再次请教从两个表提取数据的问题 没完全明白你的意思, 你的company怎么取值的?
[code:2ip4ia1f]
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;