【问题标题】:SAS Are there any function for take sample by variables?SAS 有没有按变量取样的功能?
【发布时间】:2016-06-16 15:06:07
【问题描述】:

我需要通过 sas 数据集中不同大小的变量进行抽样。

例如给定这个 sas 数据集:

 V1    V2    V3
 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

我按变量 (V1--V3) 抽取了一个简单的随机样本。 V1 中大小为 2,V2 中大小为 4,V3 中大小为 5。

最后我想要三个带有样本的数据集,即:

V1_sample
0.2
0.4

V2_sample
3.3
1.5
4.2
6.3

V3_sample
82
62
45
31
31

感谢您的任何建议。

【问题讨论】:

  • 我认为你没有充分解释你想要做什么。你想要什么作为输出?
  • 我想要三个数据集,样本分别为 V1、V2 和 V3。
  • 显示问题中的那些——这些数据集的一个示例集是什么样的?你是如何采样的?
  • 对每个变量使用简单的随机样本,其中大小随变量而变化。也就是说,对于变量 V1,取一个大小为 2 的简单随机样本。
  • 您需要在问题中提供三个数据集的外观示例。

标签: sas


【解决方案1】:

完全没有必要制作单独的数据集来执行此操作。

使用 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 的方法是将所有内容保存在单个数据集中。

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;

然后你根据这些变量进行任何分析。

【讨论】:

    【解决方案2】:

    您可以只对您的数据集进行子集化,然后运行 ​​procsurveyselect 以一次获取一个您希望一个数据集的任意大小的 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;
    

    【讨论】:

    • 基于 v3_sample 给出的示例(其中 31 出现了两次),看起来您希望使用 method = urs 而不是 srs,
    • 如果变量中有一些缺失值,我该如何在没有这些缺失值的情况下进行抽样?
    • See here,看起来有一些不同的方法可以让这个过程根据最适合您的问题来处理丢失的数据。
    猜你喜欢
    • 1970-01-01
    • 2014-01-01
    • 1970-01-01
    • 2014-07-27
    • 1970-01-01
    • 2020-09-22
    • 2020-08-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多