SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 3735|回复: 16
打印 上一主题 下一主题

请教;如何筛选出每个月最后一天

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2008-11-4 21:41:58 | 只看该作者

请教;如何筛选出每个月最后一天

例如有以下数据集
rq
1997-10-6
1997-10-7
1997-10-8
1997-10-9
1997-10-10
1997-10-13
1997-10-14
1997-10-15
1997-10-16
1997-10-17
1997-10-20
1997-10-21
1997-10-22
1997-10-23
1997-10-24
1997-10-27
1997-10-28
1997-10-29
1997-10-30
1997-10-31
1997-11-3
1997-11-4
1997-11-5
1997-11-6
1997-11-7
1997-11-10
1997-11-11
1997-11-12
1997-11-13
1997-11-14
1997-11-17
1997-11-18
1997-11-19
1997-11-20
1997-11-21
1997-11-24
1997-11-25
1997-11-26
1997-11-27
1997-11-28
1997-12-1
1997-12-2
1997-12-3
1997-12-4
1997-12-5
1997-12-8
1997-12-9
1997-12-10
1997-12-11
1997-12-12
1997-12-15
1997-12-16
1997-12-17
1997-12-18
1997-12-19
1997-12-22
1997-12-23
1997-12-24
1997-12-25
1997-12-26
1997-12-29
1997-12-30
1997-12-31
1998-1-5
1998-1-6
1998-1-7
1998-1-8
1998-1-9
1998-1-12
1998-1-13
1998-1-14
1998-1-15
1998-1-16
1998-1-19
1998-1-20
1998-1-21
1998-1-22
1998-1-23
1998-2-9
1998-2-10
1998-2-11
1998-2-12
1998-2-13
1998-2-16
1998-2-17
1998-2-18
1998-2-19
1998-2-20
1998-2-23
1998-2-24
1998-2-25
1998-2-26
1998-2-27
1998-3-2
1998-3-3
1998-3-4
1998-3-5
1998-3-6
1998-3-9
1998-3-10
1998-3-11
1998-3-12
1998-3-13
1998-3-31
rq表示日期,
现在想筛选出每个月的最后一天,请问该如何编程?谢谢
也就是得到以下数据集
1997-10-31
1997-11-28
1997-12-31
1998-1-23
1998-2-27
1998-3-31
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2008-11-4 22:07:38 | 只看该作者

Re: 请教;如何筛选出每个月最后一天

方法n多,自己好好想想吧,。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2008-11-5 15:25:03 | 只看该作者

Re: 请教;如何筛选出每个月最后一天

方法之一:
假如你的数据集名称a1:
data a2;
    set a1;
    year=year(cdate);
    month=month(cdate);
run;
proc sort data=a2;
    by year month cdate;
run;
data a3;
    set a2;
    by year month cdate;
    if last.month then output;
run;
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2008-11-5 21:41:19 | 只看该作者

Re: 请教;如何筛选出每个月最后一天

方法一显然不是最优方案
比较繁琐
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
5#
 楼主| 发表于 2008-11-6 16:27:59 | 只看该作者

Re: 请教;如何筛选出每个月最后一天

[code:1d5gyr4p]data a2;
     set a1;
         rt=input(rq,yymmdd10.);
         yr=put(rt,yymm7.);
run;

proc sql;
     create table a3 as
         select max(rt) format=yymmdd10. as last
         from a2
         group by yr;
quit;[/code:1d5gyr4p]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
6#
 楼主| 发表于 2008-11-6 19:15:42 | 只看该作者

Re: 请教;如何筛选出每个月最后一天

咳。。。。。。。。。。。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
7#
 楼主| 发表于 2008-11-6 20:23:40 | 只看该作者

Re: 请教;如何筛选出每个月最后一天

弱弱的问byes大师,是否用INTNX的效果可能会更好些? <!-- s:D --><img src="{SMILIES_PATH}/icon_biggrin.gif" alt=":D" title="Very Happy" /><!-- s:D -->
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
8#
 楼主| 发表于 2008-11-6 22:12:58 | 只看该作者

Re: 请教;如何筛选出每个月最后一天

版主太谦虚了,还弱弱,应该叫强强。
intnx的话个人觉得可以,不过这样的话正好做每个月的最后一日。
但是如果数据集中每月最后一日不是月底,而是不固定的,那就用intnx可能不是很方便了。
个人观点,进攻参考
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
9#
 楼主| 发表于 2008-11-6 23:15:13 | 只看该作者

Re: 请教;如何筛选出每个月最后一天

根据楼上的思路,修改后的代码:
data a1 ;
input rq  yymmdd10. ;
datalines ;
1997-10-6
1997-10-7
1997-10-8
1997-10-9
1997-10-10
1997-10-13
1997-10-14
1997-10-15
1997-10-16
1997-10-17
1997-10-20
1997-10-21
1997-10-22
1997-10-23
1997-10-24
1997-10-27
1997-10-28
1997-10-29
1997-10-30
1997-10-31
1997-11-3
1997-11-4
1997-11-5
1997-11-6
1997-11-7
1997-11-10
1997-11-11
1997-11-12
1997-11-13
1997-11-14
1997-11-17
1997-11-18
1997-11-19
1997-11-20
1997-11-21
1997-11-24
1997-11-25
1997-11-26
1997-11-27
1997-11-28
1997-12-1
1997-12-2
1997-12-3
1997-12-4
1997-12-5
1997-12-8
1997-12-9
1997-12-10
1997-12-11
1997-12-12
1997-12-15
1997-12-16
1997-12-17
1997-12-18
1997-12-19
1997-12-22
1997-12-23
1997-12-24
1997-12-25
1997-12-26
1997-12-29
1997-12-30
1997-12-31
1998-1-5
1998-1-6
1998-1-7
1998-1-8
1998-1-9
1998-1-12
1998-1-13
1998-1-14
1998-1-15
1998-1-16
1998-1-19
1998-1-20
1998-1-21
1998-1-22
1998-1-23
1998-2-9
1998-2-10
1998-2-11
1998-2-12
1998-2-13
1998-2-16
1998-2-17
1998-2-18
1998-2-19
1998-2-20
1998-2-23
1998-2-24
1998-2-25
1998-2-26
1998-2-27
1998-3-2
1998-3-3
1998-3-4
1998-3-5
1998-3-6
1998-3-9
1998-3-10
1998-3-11
1998-3-12
1998-3-13
1998-3-31
;


data a2;
set a1;
year_data = year(rq);
month_data = month(rq);
run;

proc sql;
    create table a3 as
    select max(rq) as rq
        from a2
    group by year_data, month_data ;
quit;
proc print data = a3 ;
format rq yymmdd10. ;
run;
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
10#
 楼主| 发表于 2008-11-7 00:44:07 | 只看该作者

Re: 请教;如何筛选出每个月最后一天

if it's already sorted by rq, then
[code:398rkign]
data b(keep=rq);
    set a1 (keep=rq rename=(rq=cur_rq)) end=eof;
    rq = lag(cur_rq);
    if _n_&gt;1 then
         if intnx('month', rq, 1, 'beginning') le cur_rq then
             output;
    if eof then do;
         rq = cur_rq;
         output;
    end;
run;
[/code:398rkign]
it just has as many steps as LSD did.
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-5 03:29 , Processed in 0.446423 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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