SAS中文论坛

标题: 一个数据选择的问题 [打印本页]

作者: shiyiming    时间: 2010-9-18 14:03
标题: 一个数据选择的问题
我有两组数据如下,现在要把数据a中日期大于数据b中日期的第一个记录挑出来,比如:表a中id为001时,挑出date>=09-07-11的第一个记录(即001 09-07-12),id为002时,挑出date>=08-06-16的记录(002 08-06-16)
同时表a中有些id在表b中可能没有,这样的记录不要
谢谢~~ <!-- s:) --><img src="{SMILIES_PATH}/icon_smile.gif" alt=":)" title="Smile" /><!-- s:) -->

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&gt;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&#46;id, a&#46;date, a&#46;date-b&#46;date as dif, min(calculated dif) as flag
            from a inner join b
                on a&#46;id=b&#46;id and a&#46;date&gt;=b&#46;date
            group by a&#46;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&gt;=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&gt;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




欢迎光临 SAS中文论坛 (https://mysas.net/forum/) Powered by Discuz! X3.2