我需要在sas数据集中通过差异大小的变量获取样本。
例如,给定sas数据集:
V1_sample
0.2
0.4
V2_sample
3.3
1.5
4.2
6.3
V3_sample
82
62
45
31
31
我已经通过变量(V1-V3)采用了一个简单的随机样本。在V1中,大小为2,在V2中,大小为4,在V3中,大小为5.
最后,我想要三个带样本的数据集,即:
{{1}}
感谢您的任何建议。
答案 0 :(得分:0)
您可以只对您的数据集进行子集化,然后运行proc surveyselect以获取您希望一次获得一个数据集的任何大小的SRS。以下代码将输出3个单独的数据集,这些数据集是v1,v2,v3列中每个的大小为n的简单随机样本。我不知道你是否可以在一个程序中完成这一切,理论上你应该能够创建一个程序来完成它,不同的样本大小会使它有点混乱。如果我想创建一个以更自动化的方式执行此操作的函数,我会使用R,我发现在R中这些类型的问题更容易处理,但那就是我。
data data;
input v1 v2 v3;
cards;
0.9 3.3 32
1.2 4.2 31
0.4 1.8 45
7 6.3 67
.8 1.5 82
5.9 4.3 62
;
run;
data v1;
set work.data;
keep v1;
run;
data v2;
set work.data;
keep v2;
run;
data v3;
set work.data;
keep v3;
run;
proc surveyselect data=work.v1 method=srs n=2 out=v1sample;
run;
proc surveyselect data=work.v2 method=srs n=4 out=v2sample;
run;
proc surveyselect data=work.v3 method=srs n=5 out=v3sample;
run;
答案 1 :(得分:0)
完全没必要制作单独的数据集来执行此操作。
使用Broseph的示例数据:
data data;
input v1 v2 v3;
cards;
0.9 3.3 32
1.2 4.2 31
0.4 1.8 45
7 6.3 67
.8 1.5 82
5.9 4.3 62
;
run;
proc surveyselect data=data method=urs n=2 out=v1_sample(keep=v1);
run;
proc surveyselect data=data method=urs n=3 out=v2_sample(keep=v2);
run;
proc surveyselect data=data method=urs n=5 out=v3_sample(keep=v3);
run;
然而,或许更多SAS-sy方法可以将所有内容保存在单个数据集中。
data have;
set data;
array v[3];
do _i = 1 to dim(v);
var = vname(v[_i]);
val = v[_i];
output;
end;
run;
data sample_counts;
input var $ _NSIZE_;
datalines;
v1 2
v2 3
v3 5
;;;;
run;
proc sort data=have;
by var;
run;
proc surveyselect data=have out=want n=sample_counts method=urs outhits;
strata var;
run;
然后你对这些变量做任何分析。