楼主: Rock2000
2519 6

[原创博文] 悬赏---随访数据整理 [推广有奖]

  • 1关注
  • 24粉丝

已卖:6892份资源

学术权威

23%

还不是VIP/贵宾

-

威望
1
论坛币
104790 个
通用积分
51.9656
学术水平
55 点
热心指数
74 点
信用等级
48 点
经验
23510 点
帖子
520
精华
0
在线时间
10924 小时
注册时间
2004-5-27
最后登录
2025-11-12

楼主
Rock2000 发表于 2011-8-31 15:11:29 |AI写论文
10论坛币
有如下随访数据,ID代表对象id号,follow代表随访次,sb=2代表发病,sb=1代表没有发病
IDfollowsbsbday
1001112010-3-1
1002112010-3-1
1002212010-6-1
1003112010-3-1
1003212010-6-1
1003322010-9-1
1004112010-3-1
1004222010-6-1
1004322010-9-1
1004422010-12-1
先在要求整理数据成如下:如果随访没有发病的(SB=1),则取最后一次随访记录的数据,如果随访发病的(SB=2),则取首次发病数据,整理好数据如下,SAS程序怎样实现?

IDfollowsbsbday
1001112010-3-1
1002212010-6-1
1003322010-9-1
1004222010-6-1

最佳答案

关键词:数据整理 follow sas程序 整理数据 LOW follow 程序 记录

沙发
guoluo 发表于 2011-8-31 15:11:30
  1. data raw;
  2. input D follow sb sbday;
  3. informat sbday yymmdd.;
  4. format sbday yymmdd10.;
  5. cards;
  6. 1001 1 1 2010-3-1
  7. 1002 1 1 2010-3-1
  8. 1002 2 1 2010-6-1
  9. 1003 1 1 2010-3-1
  10. 1003 2 1 2010-6-1
  11. 1003 3 2 2010-9-1
  12. 1004 1 1 2010-3-1
  13. 1004 2 2 2010-6-1
  14. 1004 3 2 2010-9-1
  15. 1004 4 2 2010-12-1
  16. ;

  17. proc sort data=test;
  18. by D follow;
  19. run;

  20. data final;
  21. set raw;
  22. by D follow;
  23. if first.D then flag=.;
  24. if sb = 2 then flag+1;
  25. if last.D and flag=. or flag=1 then output;
  26. drop flag;
  27. run;
复制代码

藤椅
wangyf0218 发表于 2011-8-31 16:40:25
为啥子不能删除呢。。

板凳
Rock2000 发表于 2011-8-31 16:41:07
谢谢guoluo,已经解决。

报纸
zhangzachary 发表于 2011-8-31 16:46:25
  1. data original;
  2. input id follow sb;
  3. cards;
  4. 1001 1 1
  5. 1002 1 1
  6. 1002 2 1
  7. 1003 1 1
  8. 1003 2 1
  9. 1003 3 2
  10. 1004 1 1
  11. 1004 2 2
  12. 1004 3 2
  13. 1004 4 2
  14. ;
  15. run;

  16. proc sort;by id sb;run;

  17. data final;
  18. set original;
  19. by id sb;
  20. if first.sb and sb=2 then output;
  21. else if last.id and sb ne 2 then output;
  22. run;
复制代码
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
Rock2000 + 1 + 1 + 1 热心帮助其他会员

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

寒冰凤凰 My blog: http://blog.sina.com.cn/u/1058955485

地板
Rock2000 发表于 2011-8-31 22:43:21
事实上楼上的程序更严谨,谢谢了,请看以下程序就明白。
假如某对象已经发病,但是继续是否,随访的又没有再发病,3楼程序会出错,导致多选,楼上不会。

data original;
input ID follow sb sbday;
informat sbday yymmdd.;
format sbday yymmdd10.;
cards;
1001 1 1 2010-3-1
1002 1 1 2010-3-1
1002 2 1 2010-6-1
1003 1 1 2010-3-1
1003 2 1 2010-6-1
1003 3 2 2010-9-1
1003 4 1 2010-11-1
1004 1 1 2010-3-1
1004 2 2 2010-6-1
1004 3 2 2010-9-1
1004 4 2 2010-12-1
;
run;

proc sort;by id sb;run;

data final1;
set original;
by id sb;
if first.sb and sb=2 then output;
else if last.id and sb ne 2 then output;
run;

proc print data=final1; run;

7
zhangzachary 发表于 2011-8-31 23:37:26
Rock2000 发表于 2011-8-31 22:43
事实上楼上的程序更严谨,谢谢了,请看以下程序就明白。
假如某对象已经发病,但是继续是否,随访的又没有 ...
最好再把follow或者日期用by排序一下,by id sb follow,否则如果原表是乱序的也会出问题的,按顺序排好就行了
寒冰凤凰 My blog: http://blog.sina.com.cn/u/1058955485

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-1 14:11