楼主: jessica341226
901 1

[程序分享] sas 代码求解 [推广有奖]

  • 0关注
  • 0粉丝

初中生

80%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
90 点
帖子
1
精华
0
在线时间
37 小时
注册时间
2020-3-18
最后登录
2022-12-2

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
sas 小白一个,想请教这条代码怎么写?求大神指导
同一个id有多次入院时间,其中想将两次入院时间小于14天的归为一次发病,大于14天的归为两次发病,想得到一列在某期间的发病次数的数据。

大概的数据形式是
id    入院时间
1     2019/1/1
1     2019/1/6
1     2019/3/5
2     2019/3/6
3     2019/1/18
3     2019/1/25
3     2019/2/6
3     2019/5/8
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:数据形式 大于1 SAS 时间差 发病

沙发
Rock2000 发表于 2021-6-8 15:44:27 |只看作者 |坛友微信交流群
不清楚你的目的,是要含有大于14天的所有记录,还是要含有大于14天的所有相同ID的记录。使用DIF()函数。

  1. data test;
  2. input ID $ date yymmdd10.;
  3. datalines;
  4. 1 2019/1/1
  5. 1 2019/1/6
  6. 1 2019/3/5
  7. 2 2019/3/6
  8. 3 2019/1/18
  9. 3 2019/1/25
  10. 3 2019/2/6
  11. 3 2019/5/8
  12. ;

  13. /*含有大于14天的所有记录*/
  14. data test;
  15. set test;
  16. by ID;
  17. days=dif(date); /*dif()函数,计算相邻的记录的差值*/
  18. if first.ID then days=.;
  19. run;

  20. data result; set  test;
  21. if days>=14;
  22. run;


  23. /*含有大于14天的所有相同ID的记录*/
  24. proc sql;
  25. create table result14_all as
  26. select * from test where id in (select ID from test where days>14);
  27. create table b as
  28. select * from test where id not in (select ID from test where days>14);
  29. quit;
复制代码

复制代码


使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-30 16:06