SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 638|回复: 1
打印 上一主题 下一主题

如何计算时间点未来一段时间的记录数量?

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2011-12-29 18:19:10 | 只看该作者

如何计算时间点未来一段时间的记录数量?

person,out,date三个变量。以下是其中一段数据,
任务:计算每条记录之后30天内测量记录的数量(最近30天的除外)
进阶任务:计算连续三次out均为1的记录未来30天的测量记录的数量。
person out  date
001 1 2006-5-25
001 0 2006-5-26
001 0 2006-5-27
001 1 2006-5-28
001 0 2006-5-29
001 0 2006-6-7
001 1 2006-6-8
001 1 2006-6-9
001 1 2006-7-8
001 1 2006-7-9
001 1 2006-7-25
001 0 2006-7-26
001 1 2006-7-27
001 1 2006-7-28
001 0 2006-7-29
001 0 2006-9-7
001 1 2006-9-8
001 0 2006-9-9
001 1 2006-11-8
001 1 2006-11-9
001 1 2006-11-8
001 0 2006-11-9
002 1 2006-5-25
002 0 2006-5-26
002 0 2006-6-1
002 1 2006-5-28
002 0 2006-5-5
002 0 2006-6-7
002 1 2006-6-8
002 1 2006-6-9
002 1 2006-7-8
002 1 2006-7-9
002 1 2006-7-25
002 0 2006-7-26
002 1 2006-4-27
002 1 2006-7-28
002 0 2006-7-29
002 0 2006-9-7
002 1 2006-6-8
002 0 2006-9-9
002 1 2006-11-8
002 1 2006-8-9
002 1 2006-7-11
002 0 2006-11-9
003 0 2007-5-25
003 0 2007-5-26
003 0 2007-6-1
003 1 2007-5-28
003 1 2007-5-5
003 0 2007-6-7
003 1 2007-6-8
003 1 2007-6-9
003 1 2007-7-8
003 0 2007-7-9
003 1 2007-7-25
003 0 2007-7-26
003 0 2007-4-27
003 1 2007-7-28
003 0 2007-7-29
003 0 2007-9-7
003 1 2007-6-8
003 0 2007-9-9
003 1 2007-11-8
003 0 2007-8-9
003 1 2007-7-11
003 1 2007-11-9


谢谢各位了!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2012-1-9 04:53:21 | 只看该作者

Re: 如何计算时间点未来一段时间的记录数量?

1.是对同person吗?
2.'计算每条记录之后30天内测量记录的数量(最近30天的除外)' -- 感觉好矛盾,到底是哪些天,第30-第60天?
-----姑且以同person在30-60天内为计,提供以下的code.
3.什么叫'连续三次out均为1'? 连续3天(以person,date为序?有gap算不算?)? or连续3条记录(有没有任何顺序?),是不是对同person? 实在无法理解.
针对你想要的结果,你能不能给个例子来说明一下?

[code:2nztxnsq]data a;
input p $ out $ date yymmdd9.;
d30=intnx('day',date,30);
d60=intnx('day',date,60);
  format date d30 d60 date9.;
  pk=_n_;
cards;
001 1 2006-5-25
001 0 2006-5-26
001 0 2006-5-27
001 1 2006-5-28
001 0 2006-5-29
001 0 2006-6-7
001 1 2006-6-8
001 1 2006-6-9
001 1 2006-7-8
001 1 2006-7-9
001 1 2006-7-25
001 0 2006-7-26
001 1 2006-7-27
001 1 2006-7-28
001 0 2006-7-29
001 0 2006-9-7
001 1 2006-9-8
001 0 2006-9-9
001 1 2006-11-8
001 1 2006-11-9
001 1 2006-11-8
001 0 2006-11-9
002 1 2006-5-25
002 0 2006-5-26
002 0 2006-6-1
002 1 2006-5-28
002 0 2006-5-5
002 0 2006-6-7
002 1 2006-6-8
002 1 2006-6-9
002 1 2006-7-8
002 1 2006-7-9
002 1 2006-7-25
002 0 2006-7-26
002 1 2006-4-27
002 1 2006-7-28
002 0 2006-7-29
002 0 2006-9-7
002 1 2006-6-8
002 0 2006-9-9
002 1 2006-11-8
002 1 2006-8-9
002 1 2006-7-11
002 0 2006-11-9
003 0 2007-5-25
003 0 2007-5-26
003 0 2007-6-1
003 1 2007-5-28
003 1 2007-5-5
003 0 2007-6-7
003 1 2007-6-8
003 1 2007-6-9
003 1 2007-7-8
003 0 2007-7-9
003 1 2007-7-25
003 0 2007-7-26
003 0 2007-4-27
003 1 2007-7-28
003 0 2007-7-29
003 0 2007-9-7
003 1 2007-6-8
003 0 2007-9-9
003 1 2007-11-8
003 0 2007-8-9
003 1 2007-7-11
003 1 2007-11-9
;
run;
proc sql;
create table b(keep=p out date cnt) as
   select distinct d2.*, count(d1.pk) as cnt
     from a d1 right join a d2
   on d1.p=d2.p and d2.d30<d1.date<=d2.d60
    group by d2.pk
   order by d2.p,d2.date,d2.pk;
quit;[/code:2nztxnsq]
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-6 23:19 , Processed in 0.069557 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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