楼主: sunshine880607
2390 5

[有偿编程] 如何实现以下的简单抽样? [推广有奖]

PARTY书记

学科带头人

11%

还不是VIP/贵宾

-

威望
0
论坛币
25790 个
通用积分
5.1725
学术水平
31 点
热心指数
49 点
信用等级
21 点
经验
1768 点
帖子
1042
精华
0
在线时间
2516 小时
注册时间
2009-9-12
最后登录
2024-4-19

200论坛币
现有以下的数据,想实现:
(1).对每一个subj,rp为重复测量的次数,把RV和IC看成一对,RV和IC同时测量,要实现的是对于每一个subj随机抽取2对RV_IC(标记新的重复序号rp=1、2);  
(2).对每一个subj,RV和IC不再同时测量,但测量的次数相等,要实现的是对于每一个subj随机抽取2次的RV值和随机抽取2次IC值(标记新的重复序号rp=1、2);
(3).假如要产生100个虚拟个体,每个个体重复两次,这些虚拟个体从12个subj中随机抽取,RV和IC分别按(1)和(2)两种方式抽取。
万分感谢!
数据图.jpg
RV_IC数据录入程序.txt (1.16 KB)                                          

最佳答案

mingfeng07 查看完整内容

问题(1):问题(2): 与问题(1)的区别在于一个是取两对,一个是取两次,后面包含有可能重复值,所以采用如下做法:上面得到rv的样本,重复此过程,把rv改成ic可以得到ic的样本,然后利用sql过程的join连接可以得到目标样本。 问题(3): 对于第三个问题,我是这么理解你的意思的,先对总体进行随机抽样,抽取100个subj观测的随机样本,然后对100个subj里的每个rv进行方式(1)抽样,且需要抽取两对rv,对每个ic进行方式( ...
关键词:如何实现 万分感谢 重复测量 SUB 如何

回帖推荐

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

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

问题(1):问题(2): 与问题(1)的区别在于一个是取两对,一个是取两次,后面包含有可能重复值,所以采用如下做法:上面得到rv的样本,重复此过程,把rv改成ic可以得到ic的样本,然后利用sql过程的join连接可以得到目标样本。 问题(3): 对于第三个问题,我是这么理解你的意思的,先对总体进行随机抽样,抽取100个subj观测的随机样本,然后对100个subj里的每个rv进行方式(1)抽样,且需要抽取两对rv,对每个ic进行方式( ...
既然没有得到的快乐,又何来失去的痛苦!
沙发
mingfeng07 学生认证  发表于 2014-4-13 22:49:31 |只看作者 |坛友微信交流群
问题(1):
  1. PROC SURVEYSELECT DATA=rvic OUT=a(keep=subj rp rv ic)
  2.     METHOD =sys
  3.     SEED=0
  4.    SAMPSIZE=2
  5. ;
  6. strata subj
  7. ;
  8. RUN;
  9. proc sort data=a out=a1;
  10. by subj rp;
  11. run;
  12. data wanted;
  13. set a1;
  14. by subj rp;
  15. if first.subj then rp=1;
  16. if last.subj then rp=2;
  17. run;
复制代码
问题(2):
与问题(1)的区别在于一个是取两对,一个是取两次,后面包含有可能重复值,所以采用如下做法:
  1. PROC SURVEYSELECT DATA=rvic(drop=ic) OUT=a(keep=subj rp rv)
  2.     METHOD =sys
  3.     SEED=0
  4.    SAMPSIZE=1
  5. ;
  6. STRATA subj;
  7. RUN;
  8. PROC SURVEYSELECT DATA=rvic(drop=ic) OUT=a1(keep=subj rp rv)
  9.     METHOD =sys
  10.     SEED=0
  11.    SAMPSIZE=1
  12. ;
  13. strata subj;
  14. RUN;
  15. proc sql;
  16. create table a2 as select * from a union all select * from a1;
  17. quit;
  18. proc sort data=a2 out=a3;
  19. by subj rp;
  20. run;
  21. data a4;
  22. set a3;
  23. by subj rp;
  24. if first.subj then rp=1;
  25. if last.subj then rp=2;
  26. run;
复制代码
上面得到rv的样本,重复此过程,把rv改成ic可以得到ic的样本,然后利用sql过程的join连接可以得到目标样本。
问题(3):
对于第三个问题,我是这么理解你的意思的,先对总体进行随机抽样,抽取100个subj观测的随机样本,然后对100个subj里的每个rv进行方式(1)抽样,且需要抽取两对rv,对每个ic进行方式(2)抽样,且需要抽取两次rv。
按照我上面的理解,问题(3)可以这么来做:
  1. data temp;
  2. do i=1 to 100;
  3.   r=int(1+11*ranuni(0));
  4.   output;
  5.   end;
  6.   drop i;
  7. run;
  8. proc sql;
  9. create table temp1 as select distinct(r),count(r) as count from temp group by r;
  10. quit;
复制代码
上面过程得到每个subj编号和所需要抽取的次数。然后可能需要一个宏循环,结合(1)和(2)的编程,我就不累赘重复了。
欢迎扫一扫我头像关注, 不定期分享SAS技术知识。

使用道具

藤椅
sunshine880607 发表于 2014-4-14 10:47:21 |只看作者 |坛友微信交流群
好心的坛友们,解决了论坛币还可以增加!
既然没有得到的快乐,又何来失去的痛苦!

使用道具

板凳
yongyitian 发表于 2014-4-14 11:45:14 |只看作者 |坛友微信交流群
  1. /* code for question 1 */

  2. data sample_2;
  3.     n_rp = 0;
  4.     do until(last.subj);
  5.     set rvic;
  6.         by subj;
  7.         n_rp+1;
  8.         end;
  9.         p1 = floor(ranuni(12345)*n_rp)+1;
  10.         p2 = floor(ranuni(12345)*n_rp)+1;
  11.         if p1=p2 then do until( p2^=p1);
  12.     p2= floor(ranuni(12345)*n_rp)+1;
  13.         end;
  14.         n_rp=0;
  15.     do until(last.subj);
  16.         set rvic;
  17.         by subj;
  18.         n_rp+1;
  19.         if n_rp = p1 or n_rp = p2 then output;
  20.         end;
  21.     drop n_rp p1 p2;
  22. run;
复制代码

使用道具

报纸
sunshine880607 发表于 2014-4-14 15:08:15 |只看作者 |坛友微信交流群
mingfeng07 发表于 2014-4-13 22:49
问题(1):问题(2):
与问题(1)的区别在于一个是取两对,一个是取两次,后面包含有可能重复值,所以采 ...
非常感谢。。。。。
既然没有得到的快乐,又何来失去的痛苦!

使用道具

地板
sunshine880607 发表于 2014-4-14 15:08:46 |只看作者 |坛友微信交流群
yongyitian 发表于 2014-4-14 11:45
非常感谢。。。。。
既然没有得到的快乐,又何来失去的痛苦!

使用道具

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

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

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

GMT+8, 2024-4-28 15:53