楼主: wodematlab
3179 8

单调缺失纵向数据集的模拟问题 [推广有奖]

  • 6关注
  • 7粉丝

已卖:703份资源

教授

2%

还不是VIP/贵宾

-

威望
0
论坛币
1910 个
通用积分
14.0137
学术水平
12 点
热心指数
19 点
信用等级
10 点
经验
10670 点
帖子
1063
精华
0
在线时间
972 小时
注册时间
2008-4-19
最后登录
2024-7-11

楼主
wodematlab 发表于 2015-7-4 22:52:25 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
正在做临床试验数据的模拟, 由于每周的数据都要满足一个缺失率, 并且每个试验组的缺失率也不一样, 以矩阵的形式用PROC IML存储在一个数据集里了, 目前我想到的方法是一周一周的用RANUNI等概率随机产生一定数量的随机数, 删除试验对象, 但感觉很笨. 考虑过PROC SURVEYSELECT, 但用每周来分层的话没有办法设定每个试验组不一样的缺失率. Google无果. 想请教各位大神SAS里面有没有这样的PROC步或者专门的模块可以一步达成的?
感觉表达的不够简洁, 其实就是我有一个完整的数据集, 然后想抠掉一些值让它们缺失, 缺失率矩阵长成酱紫:

missing rate
             wk1  wk2  wk3  wk4  wk5 wk6
group1 0.01 0.01 0.02 0.04 0.04 0.06
group2 0.02 0.02 0.03 0.05 0.06 0.08
group3 0.02 0.03 0.03 0.04 0.05 0.05

缺失的模式是单调的, 缺了第i周的数据, 之后的数据也全部缺失, 也就是酱紫:

     id  wk1  wk2  wk3 wk4  wk5  wk6
1001 2.65 3.08 3.14      .       .       .
1002 5.76 4.54 3.98 4.06 3.51 3.42
1003 4.53       .       .       .       .       .

我考虑的办法是先抽第一周缺失的人, 把他们删掉, 再在剩下的数据集里抽第二周缺失的人, 再删掉, 继续抽第三周, 以此类推.

这个问题应该有大牛曾经做过, 求大家畅所欲言~
二维码

扫码加我 拉你入群

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

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

关键词:纵向数据 数据集 surveyselect missing Surveys 临床试验 Google

回帖推荐

jingju11 发表于4楼  查看完整内容

say your data HAVE like: ID grp wk1...wk6 1001 1 ...... 1023 2 ....... 1821 3 ....... 1825 2 ....... code can be: JingJu

沙发
jingju11 发表于 2015-7-5 12:11:52
for group 1, both week 1 & 2 are missing 1%. Since missing at w1 has to be missing at w2, so, there are no additional missing at week2. is it correct?
JingJu

藤椅
wodematlab 发表于 2015-7-5 12:54:36
jingju11 发表于 2015-7-5 12:11
for group 1, both week 1 & 2 are missing 1%. Since missing at w1 has to be missing at w2, so, there  ...
correct.

板凳
jingju11 发表于 2015-7-5 13:08:04
wodematlab 发表于 2015-7-5 12:54
correct.
say your data HAVE like:
ID grp wk1...wk6
1001 1 ......
1023 2 .......
1821 3 .......
1825 2 .......
code can be:
  1. proc sql;
  2.         create table have2 as
  3.                 select *, count(*) as gc
  4.                 from have
  5.                 group by grp
  6.                 order by grp, ranuni(1234);
  7.         quit;

  8. data have3;
  9. set have2;
  10. by grp;
  11. array gw[3,6] _temporary_ (
  12. 0.01 0.01 0.02 0.04 0.04 0.06
  13. 0.02 0.02 0.03 0.05 0.06 0.08
  14. 0.02 0.03 0.03 0.04 0.05 0.05
  15. );
  16. array gn[3,6] _temporary_;
  17. array wk[6] wk1-wk6;
  18. if first.grp then do j=1 to dim2(gw);
  19.         gn[grp,j]=ceil(gc*gw[grp,j]);
  20.         end;
  21. /*considering monotone missing here:*/
  22. do j =dim2(gn) to 1 by -1;
  23.         if gn[grp,j] =0 then leave;
  24.         call missing(wk[j]);
  25.         gn[grp,j] +-1;
  26.         end;
  27. keep id grp wk:;
  28. proc sort; by grp id;
  29. run;
复制代码
JingJu
已有 1 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
wodematlab + 5 + 4 + 4 + 4 精彩帖子

总评分: 论坛币 + 5  学术水平 + 4  热心指数 + 4  信用等级 + 4   查看全部评分

报纸
wodematlab 发表于 2015-7-6 06:11:40
jingju11 发表于 2015-7-5 13:08
say your data HAVE like:
ID grp wk1...wk6
1001 1 ......
AMAZING! Thank you so much!!!

地板
wodematlab 发表于 2015-7-7 02:58:21
jingju11 发表于 2015-7-5 13:08
say your data HAVE like:
ID grp wk1...wk6
1001 1 ......
Is it possible to modify these lines to make them a non-monotone missing simulation? I tried but failed.

7
jingju11 发表于 2015-7-7 05:51:14
wodematlab 发表于 2015-7-7 02:58
Is it possible to modify these lines to make them a non-monotone missing simulation? I tried but f ...
from above, i simulate with the exact rates. 1% is 1%. but in this program, the rate is randomly average to 1%. that is, you may get 0.9% sometimes, or 1.1%, etc. when the number is large enough, it is very close the true rate.
  1. proc sort data=have out=have2 ;by grp; run;
  2. data have3;
  3. call streaminit(1234);
  4. set have2;
  5. by grp;
  6. array gw[3,6] _temporary_ (
  7. 0.01 0.01 0.02 0.04 0.04 0.06
  8. 0.02 0.02 0.03 0.05 0.06 0.08
  9. 0.02 0.03 0.03 0.04 0.05 0.05
  10. );
  11. array wk[6] wk1-wk6;
  12. do j =1 to dim2(gw) by 1;
  13.         if rand('table',gw[grp,j]) =1 then call missing(wk[j]);
  14.   end;
  15. keep id grp wk:;
  16. proc sort; by grp id;
  17. run;
复制代码

8
jingju11 发表于 2015-7-7 05:55:20
jingju11 发表于 2015-7-7 05:51
from above, i simulate with the exact rates. 1% is 1%. but in this program, the rate is randomly a ...
if you want the exact missing rate, you may need to use proc surveyselect or so. Not tricky, but need more code.
JingJu

9
jingju11 发表于 2015-7-9 06:38:27
多种方法可以模拟不同的确实方案.可以关注我的拨可 更新.
京剧

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

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