SAS中文论坛

标题: 如何计算时间点未来一段时间的记录数量? [打印本页]

作者: shiyiming    时间: 2011-12-29 18:19
标题: 如何计算时间点未来一段时间的记录数量?
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


谢谢各位了!
作者: shiyiming    时间: 2012-1-9 04:53
标题: 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]




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