SAS-如何根据条件选择随机样本
我有一个SAS数据集,其中包含一列从-2000到4000的数字。 我想根据以下条件选择37个随机样本。 如果num介于-2000到-1000之间,则从该范围内随机选择10个样本, 如果num介于-1000到0之间,则从该范围内随机选择15个样本, 如果num介于0到1000之间,则从该范围内随机选择12个样本 我尝试了以下方法: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
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;
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;