data a;
input ID $ Date yymmdd8.;
format Date yymmdd10.;
cards;
001 09-07-08
001 09-07-09
001 09-07-10
001 09-07-12
001 09-07-13
002 08-06-14
002 08-06-16
002 08-06-17
003 09-02-20
003 09-02-21
003 09-02-21
003 09-02-22
003 09-02-23
004 09-11-23
004 09-11-24
;
data b;
input ID $ Date yymmdd8.;
format Date yymmdd10.;
cards;
001 09-07-11
002 08-06-16
003 09-07-08
;作者: shiyiming 时间: 2010-9-18 19:13 标题: Re: 一个数据选择的问题 data a;
input ID $ Date yymmdd8.;
format Date yymmdd10.;
cards;
001 09-07-08
001 09-07-09
001 09-07-10
001 09-07-12
001 09-07-13
002 08-06-14
002 08-06-16
002 08-06-17
003 09-02-20
003 09-02-21
003 09-02-21
003 09-02-22
003 09-02-23
004 09-11-23
004 09-11-24
;
data b;
input ID $ Date yymmdd8.;
format Date yymmdd10.;
cards;
001 09-07-11
002 08-06-16
003 09-07-08
;
data result;
merge a b(rename=(Date=dateb));
by id;
if dateb=. then delete;
if Date>dateb;
run;作者: shiyiming 时间: 2010-9-18 20:27 标题: Re: 一个数据选择的问题 一点小问题,每个id只要一个结果作者: shiyiming 时间: 2010-9-21 20:57 标题: Re: 一个数据选择的问题 不太确定
[code:3kxkwscx]proc sql;
create table c(drop=dif flag) as
select a.id, a.date, a.date-b.date as dif, min(calculated dif) as flag
from a inner join b
on a.id=b.id and a.date>=b.date
group by a.id
having dif=flag;
quit;[/code:3kxkwscx]作者: shiyiming 时间: 2010-10-5 17:08 标题: Re: 一个数据选择的问题 proc sql;
create table c as
select l.*, r.date as adate
from b as l left join a as r
on l.id=l.id and r.date>=l.date
order by id, adate;
quit;
data c; set c; by id adate; if first.id; run;作者: shiyiming 时间: 2010-10-11 16:06 标题: Re: 一个数据选择的问题 data result;
merge a b(rename=(Date=dateb));
by id;
if dateb=. then delete;
if Date>dateb;
run;
data result;
set c;
by id;
if first.id=1 then output;
run;
希望对你有用作者: shiyiming 时间: 2010-10-21 21:09 标题: Re: 一个数据选择的问题 to hopewell
我觉得可以,我也碰到过类似问题,用sql可以解决。利用merge的时候会出现问题,如有帖子中引用的数据集b中主键不是唯一的,那么merge 就行不通了,推荐使用sql