SAS是否有任何按变量取样的功能?

时间:2016-06-16 15:06:07

标签: sas

我需要在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}}

感谢您的任何建议。

2 个答案:

答案 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;

然后你对这些变量做任何分析。