851 2

[问答] 如何将长数据转为生存数据 [推广有奖]

  • 0关注
  • 0粉丝

小学生

50%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
170 点
帖子
2
精华
0
在线时间
9 小时
注册时间
2021-6-8
最后登录
2021-8-9

楼主
亲爱的达瓦里希 发表于 2021-7-22 14:41:17 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
假设我有这样一组长数据:
ID group time outcome
1 1 1 0
1 1 2 0
1 1 3 0
1 1 4 1
2 1 1 0
2 1 2 0
2 1 3 0
2 1 4 0
3 2 1 0
3 2 2 0
3 2 3 1
3 2 4 1
4 2 1 0
4 2 2 1
4 2 3 1
4 2 4 1

ID是病人ID,group是每个病人的分组,time代表这是对该病人的第n次观察记录,outcome = 1则代表感兴趣的事件在该时间段发生了,= 0则代表事件未发生。

我现在想把这样的长数据转化为生存数据,在保留group的情况下记录下每个病人第一次outcome发生的time,若在整个试验期间感兴趣的事件未发生,则outcome应 = 0且time = 对病人观察记录的时间,换言之我想获得以下格式的数据:
ID group time outcome
1 1 4 1
2 1 4 0
3 2 3 1
4 2 2 1

恳请各位SAS大佬指点,或者R也行
二维码

扫码加我 拉你入群

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

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

关键词:长数据 outcome Group time Come

沙发
whymath 发表于 2021-7-28 23:16:53
  1. data have;
  2.   input ID$ group$ time outcome;
  3.   cards;
  4. 1 1 1 0
  5. 1 1 2 0
  6. 1 1 3 0
  7. 1 1 4 1
  8. 2 1 1 0
  9. 2 1 2 0
  10. 2 1 3 0
  11. 2 1 4 0
  12. 3 2 1 0
  13. 3 2 2 0
  14. 3 2 3 1
  15. 3 2 4 1
  16. 4 2 1 0
  17. 4 2 2 1
  18. 4 2 3 1
  19. 4 2 4 1
  20. ;
  21. run;

  22. data want;
  23.   set have;
  24.   by ID group;

  25.   retain flag_of_flag;
  26.   if first.group then flag_of_flag = 0;
  27.   if outcome = 1 and flag_of_flag = 0 then flag = 1;
  28.   if flag = 1 then flag_of_flag = 1;
  29.   if (last.group and flag_of_flag = 0) or flag = 1;

  30.   drop flag flag_of_flag;
  31. run;
复制代码

藤椅
孤单的我们 发表于 2021-8-10 09:43:14
  1. require(dplyr)
  2. dat1 <- dat.test %>% filter(outcome == 1) %>% group_by(ID) %>% filter(row_number()==1)
  3. '%notin%' <- Negate('%in%')
  4. dat2 <- dat.test %>% filter(ID %notin% dat1$ID) %>% group_by(ID) %>% filter(row_number() == n())
  5. out <- rbind(dat1, dat2) %>% arrange(ID)
复制代码

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

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