楼主: niuwussc
4140 10

[原创博文] 如何计算时间点未来一段时间的记录数量统计? [推广有奖]

  • 0关注
  • 0粉丝

本科生

21%

还不是VIP/贵宾

-

威望
0
论坛币
1096 个
通用积分
0.6000
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
1738 点
帖子
52
精华
0
在线时间
106 小时
注册时间
2005-10-26
最后登录
2025-8-28

楼主
niuwussc 发表于 2011-12-29 16:38:13 |AI写论文
100论坛币

personoutdate三个变量。以下是其中一段数据,

任务:计算每条记录之后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


谢谢各位了!

关键词:Person date Out RSO ERS person 记录 如何 统计 测量

沙发
shenliang_111 发表于 2011-12-29 16:38:14
niuwussc 发表于 2011-12-30 06:10
谢谢各位的热情,我把完整的数据传上来。见附件。

回复shenliang_111:之前用day来计算有些问题,看起来 ...
  1. /*问题一的程序*/
  2. proc sql;
  3. create table result1(drop=n) as
  4. select distinct a.*,count(b.n) as number
  5. from(select a.*,monotonic() as n from a) a
  6. left join (select a.*,monotonic() as n from a) b
  7. on a.person=b.person
  8. and a.n lt b.n
  9. and b.time le intnx('dtday',a.time,30,'same') and b.time ge a.time
  10. group by a.n
  11. order by a.n;
  12. quit;
  13. /*问题二的程序*/
  14. proc sql;
  15. create table result2(drop=n) as
  16. select distinct a.*
  17. from (select *,monotonic()as n from result1) a
  18. left join (select *,monotonic()as n from result1) b
  19. on a.person=b.person and (b.n-a.n) in (-2,-1,0,1,2)
  20. group by a.n
  21. having sum(b.out)=5
  22. order by a.n;
  23. quit;
复制代码

藤椅
shenliang_111 发表于 2011-12-29 19:15:58
  1. /*第一问的可能程序*/
  2. data a;
  3. input / person out date :yymmdd10.;
  4. format date yymmdd10.;
  5. cards;

  6. 001 1 2006-5-25

  7. 001 0 2006-5-26

  8. 001 0 2006-5-27

  9. 001 1 2006-5-28

  10. 001 0 2006-5-29

  11. 001 0 2006-6-7

  12. 001 1 2006-6-8

  13. 001 1 2006-6-9

  14. 001 1 2006-7-8

  15. 001 1 2006-7-9

  16. 001 1 2006-7-25

  17. 001 0 2006-7-26

  18. 001 1 2006-7-27

  19. 001 1 2006-7-28

  20. 001 0 2006-7-29

  21. 001 0 2006-9-7

  22. 001 1 2006-9-8

  23. 001 0 2006-9-9

  24. 001 1 2006-11-8

  25. 001 1 2006-11-9

  26. 001 1 2006-11-8

  27. 001 0 2006-11-9

  28. 002 1 2006-5-25

  29. 002 0 2006-5-26

  30. 002 0 2006-6-1

  31. 002 1 2006-5-28

  32. 002 0 2006-5-5

  33. 002 0 2006-6-7

  34. 002 1 2006-6-8

  35. 002 1 2006-6-9

  36. 002 1 2006-7-8

  37. 002 1 2006-7-9

  38. 002 1 2006-7-25

  39. 002 0 2006-7-26

  40. 002 1 2006-4-27

  41. 002 1 2006-7-28

  42. 002 0 2006-7-29

  43. 002 0 2006-9-7

  44. 002 1 2006-6-8

  45. 002 0 2006-9-9

  46. 002 1 2006-11-8

  47. 002 1 2006-8-9

  48. 002 1 2006-7-11

  49. 002 0 2006-11-9

  50. 003 0 2007-5-25

  51. 003 0 2007-5-26

  52. 003 0 2007-6-1

  53. 003 1 2007-5-28

  54. 003 1 2007-5-5

  55. 003 0 2007-6-7

  56. 003 1 2007-6-8

  57. 003 1 2007-6-9

  58. 003 1 2007-7-8

  59. 003 0 2007-7-9

  60. 003 1 2007-7-25

  61. 003 0 2007-7-26

  62. 003 0 2007-4-27

  63. 003 1 2007-7-28

  64. 003 0 2007-7-29

  65. 003 0 2007-9-7

  66. 003 1 2007-6-8

  67. 003 0 2007-9-9

  68. 003 1 2007-11-8

  69. 003 0 2007-8-9

  70. 003 1 2007-7-11

  71. 003 1 2007-11-9
  72. ;
  73. proc sql;
  74. create table result1(drop=n) as
  75. select distinct a.*,count(b.n) as number
  76. from(select a.*,monotonic() as n from a) a
  77. left join (select a.*,monotonic() as n from a) b
  78. on a.person=b.person
  79. and a.n lt b.n
  80. and b.date le intnx('day',a.date,30,'same') and b.date ge a.date
  81. group by a.person,a.date
  82. order by a.n;
  83. quit;
复制代码


板凳
shenliang_111 发表于 2011-12-29 19:17:26
shenliang_111 发表于 2011-12-29 19:15
至于第二问?问下楼主 什么样的记录叫做连续三次out都为1?

报纸
niuwussc 发表于 2011-12-29 19:53:31
shenliang_111 发表于 2011-12-29 19:17
至于第二问?问下楼主 什么样的记录叫做连续三次out都为1?
谢谢

比如,你看下面这个,中间的out变量,连续五次为1,也就是有三个连续三次为1的情况。

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

地板
shenliang_111 发表于 2011-12-29 22:12:21
niuwussc 发表于 2011-12-29 19:53
谢谢

比如,你看下面这个,中间的out变量,连续五次为1,也就是有三个连续三次为1的情况。
  1. /*01.从result1中筛选出那些符合条件的记录就可以了,下面的程序可能能够满足楼主的要求!*/
  2. proc sql;
  3. create table result2(drop=n) as
  4. select distinct a.*
  5. from (select *,monotonic()as n from result1) a
  6. left join (select *,monotonic()as n from result1) b
  7. on a.person=b.person and (b.n-a.n) in (-2,-1,0,1,2)
  8. group by a.n
  9. having sum(b.out)=5
  10. order by a.n;
  11. quit;
复制代码
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
niuwussc + 1 + 1 + 1 精彩帖子

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

7
niuwussc 发表于 2011-12-29 22:43:59
shenliang,你好,这段测试数据没问题,但是实际数据出差错了,为什么number那么大呢?


person        Date        number
M10002        14-Sep-11        100
M10002        15-Sep-11        104
M10002        16-Sep-11        205
M10002        16-Sep-11        205
M10002        17-Sep-11        107
M10002        19-Sep-11        363
M10002        19-Sep-11        363
M10002        19-Sep-11        363
M10002        20-Sep-11        1309
M10002        20-Sep-11        1309
M10002        20-Sep-11        1309
M10002        20-Sep-11        1309
M10002        20-Sep-11        1309
M10002        20-Sep-11        1309
M10002        20-Sep-11        1309
M10002        20-Sep-11        1309
M10002        20-Sep-11        1309
M10002        20-Sep-11        1309
M10002        20-Sep-11        1309
M10002        21-Sep-11        1008
M10002        21-Sep-11        1008
M10002        21-Sep-11        1008
M10002        21-Sep-11        1008
M10002        21-Sep-11        1008
M10002        21-Sep-11        1008
M10002        21-Sep-11        1008
M10002        21-Sep-11        1008
M10002        21-Sep-11        1008
M10002        22-Sep-11        535
M10002        22-Sep-11        535
M10002        22-Sep-11        535
M10002        22-Sep-11        535
M10002        22-Sep-11        535
M10002        23-Sep-11        315
M10002        23-Sep-11        315
M10002        23-Sep-11        315
M10002        24-Sep-11        900
M10002        24-Sep-11        900
M10002        24-Sep-11        900
M10002        24-Sep-11        900
M10002        24-Sep-11        900
M10002        24-Sep-11        900
M10002        24-Sep-11        900
M10002        24-Sep-11        900

8
niuwussc 发表于 2011-12-29 22:45:02
补充一句,M10002这个person的所有记录加起来,只有651条

9
shenliang_111 发表于 2011-12-29 23:17:19
niuwussc 发表于 2011-12-29 22:45
补充一句,M10002这个person的所有记录加起来,只有651条
能不能把原数据集发给我一下?我看看

10
bobguy 发表于 2011-12-30 03:27:43
The problem looks simple but I am not sure about your requirements.

The data have some duplicates. For example,

001 1 2006-11-8

001 1 2006-11-9

001 1 2006-11-8

001 0 2006-11-9

What is the counting rule for those duplicates.

Do you need to calculate it for every observation of each ID?

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-9 07:59