楼主: 爱统计爱VV
1566 3

[SAS EM] 编号相同,访视日期不同的数据该怎样计算日期差?? [推广有奖]

  • 1关注
  • 0粉丝

高中生

65%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0.0000
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
43 点
帖子
2
精华
0
在线时间
76 小时
注册时间
2020-8-28
最后登录
2024-5-7

楼主
爱统计爱VV 发表于 2021-2-1 11:36:16 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
格式如下:请问用SAS该怎样计算实现相同姓名的病例,两次检查日期的间隔呢???
或者把同一个病例,几次检查的日期放在一行上面?
二维码

扫码加我 拉你入群

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

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

关键词:sas

数据.xls
下载链接: https://bbs.pinggu.org/a-3386506.html

18.5 KB

数据

沙发
乐天天12300 发表于 2021-2-1 12:04:25
你看你的时间需不需要排序,如果需要你加入时间变量的排序
  1. data  test;
  2.   input name $ date Anydtdte.;
  3. cards;
  4. 张三 2019/3/5
  5. 张三         2020/3/16
  6. 李四 2019/5/31
  7. 李四 2020/6/2
  8. 李四         2019/4/20
  9. 王五 2019/8/3
  10. 王五         2018/12/1
  11. 王五 2019/3/28
  12. 王五         2020/11/3
  13. ;

  14. proc sort data=test;
  15.    by name;
  16. run;

  17. data test1;
  18.    set test;
  19.    by name;
  20.    diff=date-lag(date);
  21.    if first.name then diff=.;
  22. run;
复制代码

藤椅
superguy333 发表于 2021-2-13 00:35:05
  1. data x1;
  2. input NAME $6. DATE $12.;
  3. cards;
  4. 张三          2019/3/5
  5. 张三          2020/3/16
  6. 李四          2019/5/31
  7. 李四          2020/6/2
  8. 李四          2019/4/20
  9. 王五  2019/8/3
  10. 王五          2018/12/1
  11. 王五          2019/3/28
  12. 王五  2020/11/3
  13. ;run;
  14. /*将日期转化成时间戳*/
  15. data x2;
  16. set x1;
  17. year=SUBSTR(DATE,1,4);
  18. MONTH=SUBSTR(DATE,6,find(DATE,'/',6)-6);/*  find(DATE,'/',6)------第二个斜杠在字符串DATE中的位置*/
  19. DAY=SUBSTR(DATE,find(DATE,'/',6)+1,(LENGTH(DATE)-find(DATE,'/',6)));
  20. MDY_NO=MDY(MONTH,DAY,YEAR);  /*时间戳数值*/
  21. run;
  22. /*按名字,就诊时间排序*/
  23. PROC SORT DATA=X2;
  24. BY NAME MDY_NO;
  25. RUN;
  26. /*计算时间间隔,单位天*/
  27. DATA X3;
  28. SET X2;
  29. DAY_DIF=MDY_NO-LAG(MDY_NO);
  30. RUN;
  31. /*第一次就诊置0*/
  32. DATA X4;
  33. SET X3;
  34. IF FIRST.NAME THEN  DAY_DIF=0 ;
  35. BY NAME;
  36. RUN;
  37. /*保留字段NAME DATE DAY_DIF*/
  38. DATA X5(KEEP= NAME DATE DAY_DIF);
  39. SET X4;
  40. RUN;
复制代码

捕获.JPG

板凳
superguy333 发表于 2021-2-13 09:26:06
  1. data x1;
  2. input NAME $6. DATE $12.;
  3. cards;
  4. 张三          2019/3/5
  5. 张三          2020/3/16
  6. 李四          2019/5/31
  7. 李四          2020/6/2
  8. 李四          2019/4/20
  9. 王五  2019/8/3
  10. 王五          2018/12/1
  11. 王五          2019/3/28
  12. 王五  2020/11/3
  13. ;run;
  14. /*将日期转化成时间戳*/
  15. data x2;
  16. set x1;
  17. year=SUBSTR(DATE,1,4);
  18. MONTH=SUBSTR(DATE,6,find(DATE,'/',6)-6);/*  find(DATE,'/',6)------第二个斜杠在字符串DATE中的位置*/
  19. DAY=SUBSTR(DATE,find(DATE,'/',6)+1,(LENGTH(DATE)-find(DATE,'/',6)));
  20. MDY_NO=MDY(MONTH,DAY,YEAR);  /*时间戳数值*/
  21. run;
  22. /*按名字,就诊时间排序*/
  23. PROC SORT DATA=X2;
  24. BY NAME MDY_NO;
  25. RUN;
  26. /*计算时间间隔,单位天*/
  27. DATA X3;
  28. SET X2;
  29. DAY_DIF=MDY_NO-LAG(MDY_NO);
  30. RUN;
  31. /*第一次就诊置0*/
  32. DATA X4;
  33. SET X3;
  34. IF FIRST.NAME THEN  DAY_DIF=0 ;
  35. BY NAME;
  36. RUN;
  37. /*保留字段NAME DATE DAY_DIF*/
  38. DATA X5(KEEP= NAME DATE DAY_DIF);
  39. SET X4;
  40. RUN;
复制代码

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-2-17 22:18