SAS-如何根据条件选择随机样本

SAS-如何根据条件选择随机样本,sas,sampling,Sas,Sampling,我有一个SAS数据集,其中包含一列从-2000到4000的数字。 我想根据以下条件选择37个随机样本。 如果num介于-2000到-1000之间,则从该范围内随机选择10个样本, 如果num介于-1000到0之间,则从该范围内随机选择15个样本, 如果num介于0到1000之间,则从该范围内随机选择12个样本 我尝试了以下方法: proc surveyselect data=save.table method=srs n=37 out=save.table_sample seed=1953

我有一个SAS数据集,其中包含一列从-2000到4000的数字。 我想根据以下条件选择37个随机样本。 如果num介于-2000到-1000之间,则从该范围内随机选择10个样本, 如果num介于-1000到0之间,则从该范围内随机选择15个样本, 如果num介于0到1000之间,则从该范围内随机选择12个样本

我尝试了以下方法:

proc surveyselect data=save.table
   method=srs n=37 out=save.table_sample seed=1953;
run;
但这将给我从整个人群中随机抽取37个样本。我想根据数据范围随机选择


请帮助使用SAS代码,非常感谢

如果您想继续使用
proc surveyselect
,一种简单的方法是:

data set1 set2 set3;
  set save.table;
  if number < -1000 then output set1;
  else if number < 0 then output set2;
  else if number < 1000 then output set3;
run;
数据集1集2集3;
设置save.table;
如果数字<-1000,则输出set1;
否则,如果数字小于0,则输出set2;
否则,如果数字小于1000,则输出set3;
跑
然后使用这3个数据集上的不同n值调用
proc surveyselect
三次

  • 在数据集中创建可用于分组分析的分组变量

    data output;
    set save.table;
    if number < -1000 then group=1;
    else if number < 0 then group=2;
    else if number < 1000 then group=3;
    run;
    
  • 无法测试,因为未提供任何样本数据,因此下面是使用SASHELP.HEART的示例

    proc sort data=sashelp.heart out=heart; by chol_status; run;
    
    
    proc surveyselect data=heart (where=(not missing(chol_status))) method=srs sampsize=(5 10 15) out=want;
    strata chol_status;
    run;
    

    你试过用不同的where子句每次运行三次吗?Richard,我提出了一些基本相同的建议。Where子句实际上会更干净,因为我们可以完全避免数据步骤。谢谢您的回答。是的,这可能有用!然而,我只是用一个小例子来演示我的问题。实际上,我需要对数据进行20次分离和采样(在本例中不是3次)。那么,除了创建20个数据集之外,您还知道其他更好的方法吗?再次感谢如果可以选择打20次电话给proc surveyselect,那么Richard在评论中提出的方法是做同样事情的更好方法。如果没有,我可以使用一个单独的数据步骤提出不同的方法。请提出一个单独的数据步骤。这样会更有效率,对我来说学习是件好事。非常感谢你的帮助!如果您想放弃额外的数据步骤,可以使用我的解决方案尝试使用一种格式。计算地层值是非常聪明的。从帮助
    “地层语句命名一个或多个将输入数据集划分为非重叠组(地层)的变量”
    “地层变量的格式化值决定了地层变量的级别。”
    “地层变量的功能非常类似于按变量,PROC SURVEYSELECT希望输入数据集按地层变量排序。STRATA语句中提供了“按语句降序”和“不排序”选项。“
    proc sort data=sashelp.heart out=heart; by chol_status; run;
    
    
    proc surveyselect data=heart (where=(not missing(chol_status))) method=srs sampsize=(5 10 15) out=want;
    strata chol_status;
    run;