950 2

[问答] [求助]SAS中如何填充缺失的观测(不是data imputation) [推广有奖]

  • 0关注
  • 0粉丝

小学生

50%

还不是VIP/贵宾

-

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

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
我有一组数据大概长成这样:

Id time outcome
1 1 0
1 2 0
1 3 0
1 4 1
1 5 0
2 1 0
2 2 0
2 3 1
3 2 1
3 4 0
...
10 1 0
10 3 0
10 4 1
同id会随时间进行最多5次记录,然而现在的问题是有的ID的缺了前几次的数据记录,有的缺了后几次的,还有的缺了中间的。我现在想把缺失的数据补全,例如ID为2的缺了第4和第5次记录,则给他加上两行代表第4和第5次记录的新数据(outcome显示为NA即可)。换言之我想要的结果如下:
Id time outcome
1 1 0
1 2 0
1 3 0
1 4 1
1 5 0
2 1 0
2 2 0
2 3 1
2 4 NA
2 5 NA
3 1 NA
3 2 1
3 3 NA
3 4 0
3 5 NA
...
尝试了proc expand等很多种办法都没有用,求热心人士解答!
二维码

扫码加我 拉你入群

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

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

关键词:Imputation ATION Data TIO put

回帖推荐

whymath 发表于3楼  查看完整内容

建议您了解一下笛卡尔积,以下示例程序可以解决您的问题。
沙发
乐天天12300 发表于 2021-6-10 18:44:46 |只看作者 |坛友微信交流群
可以用sql 的distinct求出id个数,然后用两层循环,得到含所有的id和每个id 5个time的全数据。然后用这个数据和你的数据进行匹配合并,这样就可以将你的数据里time缺失的或者id缺失的补全了。然后对缺失值进行赋值NA。

使用道具

藤椅
whymath 发表于 2021-6-11 22:14:26 |只看作者 |坛友微信交流群
建议您了解一下笛卡尔积,以下示例程序可以解决您的问题。
  1. data test;
  2.   input Id time outcome$;
  3.   cards;
  4. 1 1 0
  5. 1 2 0
  6. 1 3 0
  7. 1 4 1
  8. 1 5 0
  9. 2 1 0
  10. 2 2 0
  11. 2 3 1
  12. 3 2 1
  13. 3 4 0
  14. ;
  15. run;

  16. proc sql noprint;
  17.   create table want as
  18.   select a.id, b.time, coalescec(c.outcome,'NA') as outcome
  19.   from (select distinct Id from test) as a
  20.   cross join (select distinct time from test) as b
  21.   left join test as c on a.Id = c.Id and b.time = c.time
  22.   ;
  23. quit;
复制代码

使用道具

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

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

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

GMT+8, 2024-4-28 18:51