SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 1821|回复: 3
打印 上一主题 下一主题

找出每个subject的最新记录

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2012-12-21 14:25:51 | 只看该作者

找出每个subject的最新记录

例如:
subject  date                flag
1           12DEC2011
2           11DEC2010
1           21OCT2012
3           20NOV2011
2           21DEC2012

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

如何实现?
Thanks
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2012-12-21 14:59:37 | 只看该作者

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;
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2012-12-26 14:52:12 | 只看该作者

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]


首先,谢谢你的答案。

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

背景:每个人在不同的时间,做不同的测试(也可能在同一天做不同的测试)。
结果要求:找出每个人每个测试的最后一个测试值。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2013-1-6 23:52:48 | 只看该作者

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]
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|SAS中文论坛  

GMT+8, 2025-5-2 18:21 , Processed in 0.074813 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表