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

SAS - How to select random samples based on condition

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

我试过以下方法:

proc surveyselect data=save.table
   method=srs n=37 out=save.table_sample seed=1953;
run;

但这会给我从整个人群中随机抽取 37 个样本。我想根据数据范围随机select。

请帮忙处理 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;

然后在这 3 个数据集上用不同的 n 值调用 proc surveyselect 三次。

  1. 在您的数据集中创建一个可用于分组分析的分组变量。

    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;
    
  2. 将 PROC SURVEYSELECT 与具有相同变量、GROUP 以及样本大小的数据集一起使用,或者在 PROC SURVEYSELECT 中列出样本大小。

    proc surveyselect data=output
    method=srs n=37 out=save.table_sample seed=1953 sampsize=(37 15 12);
    strata group;
    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;