SAS中文论坛
标题:
请教随机抽取样本的一个问题(着急用,在线等)
[打印本页]
作者:
shiyiming
时间:
2012-11-12 16:35
标题:
请教随机抽取样本的一个问题(着急用,在线等)
大家好,我的问题是这样的。我有一个数据集,一共96条记录(96个人 subjid,每个人一条),我现在要随机抽取10%的人(96*10%=9.6,不是整数,取10人)。抽取的时候要考虑中心(siteid),保证每个中心至少一个人(中心总数不超过10的)。该如何实现?谢谢各位大侠!数据如下:
[code:21r1pj20]data sj;
input siteid $ subjid $;
cards;
1001 8008
1001 8009
1001 8010
1001 8201
1001 8202
1001 8216
1001 8217
1001 8218
1001 8219
1001 8401
1001 8402
1001 8403
1001 8406
1001 8407
1001 8408
1001 8411
1001 8412
1001 8413
1002 8003
1002 8011
1002 8204
1002 8205
1002 8211
1002 8212
1003 8042
1003 8045
1003 8046
1003 8047
1003 8048
1003 8049
1003 8083
1003 8213
1003 8214
1003 8215
1003 8241
1003 8246
1003 8247
1003 8248
1003 8249
1003 8281
1003 8289
1004 8050
1004 8087
1004 8088
1004 8250
1004 8284
1004 8286
1004 8287
1004 8288
1004 8291
1004 8292
1004 8300
1006 8252
1006 8253
1006 8254
1006 8255
1006 8256
1007 8001
1007 8002
1007 8004
1007 8043
1007 8044
1007 8052
1007 8085
1007 8210
1008 8084
1008 8086
1008 8203
1008 8206
1008 8207
1008 8243
1008 8244
1008 8245
1008 8251
1008 8285
1008 8290
1008 8293
1009 8005
1009 8006
1009 8007
1009 8041
1009 8051
1009 8208
1009 8209
1009 8242
1013 8294
1013 8295
1013 8296
1013 8297
1013 8298
1013 8299
1013 8301
1022 8081
1022 8082
1022 8282
1022 8283
;
run;
[/code:21r1pj20]
作者:
shiyiming
时间:
2012-11-12 20:43
标题:
Re: 请教随机抽取样本的一个问题(着急用,在线等)
[code:2dndhk5f]
data sj;
input siteid $ subjid $;
cards;
1001 8008
1001 8009
1001 8010
1001 8201
1001 8202
1001 8216
1001 8217
1001 8218
1001 8219
1001 8401
1001 8402
1001 8403
1001 8406
1001 8407
1001 8408
1001 8411
1001 8412
1001 8413
1002 8003
1002 8011
1002 8204
1002 8205
1002 8211
1002 8212
1003 8042
1003 8045
1003 8046
1003 8047
1003 8048
1003 8049
1003 8083
1003 8213
1003 8214
1003 8215
1003 8241
1003 8246
1003 8247
1003 8248
1003 8249
1003 8281
1003 8289
1004 8050
1004 8087
1004 8088
1004 8250
1004 8284
1004 8286
1004 8287
1004 8288
1004 8291
1004 8292
1004 8300
1006 8252
1006 8253
1006 8254
1006 8255
1006 8256
1007 8001
1007 8002
1007 8004
1007 8043
1007 8044
1007 8052
1007 8085
1007 8210
1008 8084
1008 8086
1008 8203
1008 8206
1008 8207
1008 8243
1008 8244
1008 8245
1008 8251
1008 8285
1008 8290
1008 8293
1009 8005
1009 8006
1009 8007
1009 8041
1009 8051
1009 8208
1009 8209
1009 8242
1013 8294
1013 8295
1013 8296
1013 8297
1013 8298
1013 8299
1013 8301
1022 8081
1022 8082
1022 8282
1022 8283
;
run;
proc sort data=sj;
by siteid;
run;
proc surveyselect data=sj
method=srs
rep=1
samprate=0.1
seed=12345
out=samds;
strata siteid;
id _all_;
run;
[/code:2dndhk5f]
作者:
shiyiming
时间:
2012-11-13 07:28
标题:
Re: 请教随机抽取样本的一个问题(着急用,在线等)
谢谢 MerlinZHOU。
这里的samprate是对每个strata 组里面的人数分别取10%? 理论上(#strata1*10% +#strata2*10%+.....)=(#strata1+#strata2+......)*10%. 但这个过程如果#strata1是18人,#strata1*10%=1.8, 这个时对strata1 是不是会取到2个人? 这样(#strata1*10% +#strata2*10%+.....) != (#strata1+#strata2+......)*10%. 所以这里的样本的总数是不是ceil(96*10%)=10,结果是14. 有没有一种办法,让总数为10的前提下,保证每个site 都有一个人?
作者:
shiyiming
时间:
2012-11-13 08:41
标题:
Re: 请教随机抽取样本的一个问题(着急用,在线等)
附上一段我的一短比较笨的方法:
[code:i4e6cfoo]
proc sort data=sj;by siteid;run;
proc surveyselect data=sj
method=srs
sampsize=(1 1 1 1 1 1 1 1 1 1) /*刚好有10个中心,所以每个中心的权中都是一样的*/
seed=12345
out=samds;
strata siteid;
id siteid;
run;
[/code:i4e6cfoo]
作者:
shiyiming
时间:
2012-11-14 10:16
标题:
Re: 请教随机抽取样本的一个问题(着急用,在线等)
你的方法很好用,我加了点东西让它智能点。
[code:3avjpee0]
%let sr=0.1;
proc sort data=sj;
by siteid;
run;
data sj;
set sj nobs=num;
call symput('num',num);
run;
data one;
r=ceil(&num.*&sr.);
do i=1 to r;
one=1;
output;
end;
keep one;
run;
proc sql noprint;
select one into :one separated by ' '
from one;
quit;
proc surveyselect data=sj
method=srs
sampsize=(&one.) /*刚好有10个中心,所以每个中心的权中都是一样的*/
seed=12345
out=samds;
strata siteid;
id siteid;
run;
[/code:3avjpee0]
作者:
shiyiming
时间:
2012-12-5 16:05
标题:
Re: 请教随机抽取样本的一个问题(着急用,在线等)
膜拜大神,认真体会!
作者:
shiyiming
时间:
2012-12-18 10:47
标题:
Re: 请教随机抽取样本的一个问题(着急用,在线等)
really 好的观点.
proc surveyselect....samplesize =10;
..;
strata.../alloc =prop;
run;
sas 应该自动控制每层的个数至少为1.
京剧
欢迎光临 SAS中文论坛 (http://mysas.net/forum/)
Powered by Discuz! X3.2