SAS中文论坛

标题: 找出每个subject的最新记录 [打印本页]

作者: shiyiming    时间: 2012-12-21 14:25
标题: 找出每个subject的最新记录
例如:
subject  date                flag
1           12DEC2011
2           11DEC2010
1           21OCT2012
3           20NOV2011
2           21DEC2012

如果是某个subject 的最新记录,则flag=Y

如何实现?
Thanks
作者: shiyiming    时间: 2012-12-21 14:59
标题: Re: 找出每个subject的最新记录
data test;
        input subject date date9.;
        cards;
1 12DEC2011
2 11DEC2010
1 21OCT2012
3 20NOV2011
2 21DEC2012
;
proc sort data=test out=test1;
        by subject descending date;
run;
data test2;
        set test1;
        by subject descending date;
        if first.subject and first.date then flag='Y';
                else  flag='N';
run;

SQL:
data test;
        input subject date date9.;
        cards;
1 12DEC2011
2 11DEC2010
1 21OCT2012
3 20NOV2011
2 21DEC2012
;
proc sql;
        create table test2 as
                select subject,date,
                case date
                        when max(date) then 'Y'
                        else 'N'
                end as flag
                from test
                group by subject;
quit;
作者: shiyiming    时间: 2012-12-26 14:52
标题: Re: 找出每个subject的最新记录
[quote="huazi":23ik7pc8]data test;
        input subject date date9.;
        cards;
1 12DEC2011
2 11DEC2010
1 21OCT2012
3 20NOV2011
2 21DEC2012
;
proc sort data=test out=test1;
        by subject descending date;
run;
data test2;
        set test1;
        by subject descending date;
        if first.subject and first.date then flag='Y';
                else  flag='N';
run;

SQL:
data test;
        input subject date date9.;
        cards;
1 12DEC2011
2 11DEC2010
1 21OCT2012
3 20NOV2011
2 21DEC2012
;
proc sql;
        create table test2 as
                select subject,date,
                case date
                        when max(date) then 'Y'
                        else 'N'
                end as flag
                from test
                group by subject;
quit;[/quote:23ik7pc8]


首先,谢谢你的答案。

还有另外一个问题,跟这个很类似,但是加了一个条件。

背景:每个人在不同的时间,做不同的测试(也可能在同一天做不同的测试)。
结果要求:找出每个人每个测试的最后一个测试值。
作者: shiyiming    时间: 2013-1-6 23:52
标题: Re: 找出每个subject的最新记录
I like mischief.
[code:1suxqsgn]
data ahuige;
    input
    subject date date9.;
    format date date9.;
    cards;
1 12DEC2011
2 11DEC2010
1 21OCT2012
3 20NOV2011
2 21DEC2012
;run;

proc sql;
    select *,byte((date=max(date))*11+78)
    from ahuige
    group by subject
    order by subject,date
    ;quit;[/code:1suxqsgn]




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