使用 SAS 进行采样
Sampling with SAS
我是 SAS 的新手,我继承了一段代码,其中 select 行来自样本帧,并将它们作为样本放入另一个数据集中。 758 是它采样的行数。 srno 似乎是一个简单的序列号系统。
data FinalSample;
srno=0;
SampSize = 758;
ObsLeft = Totobs;
do while (SampSize > 0);
PickIt +1;
if ranuni(0) < SampSize / ObsLeft then do;
set SampleFrame point = PickIt nobs = TotObs;
srno = srno + 1;
output;
SampSize = Sampsize - 1;
end;
ObsLeft = ObsLeft - 1;
end;
stop;
run;
在我看来这只是一个简单的随机样本。是这样吗?我想知道如果我要进入 Proc SurveySelect
命令,代码是否会更容易理解。
使用 method = SRS
和 samplesize = 758
的调查 select 上面的代码会有什么不同吗?
非常感谢,
安迪
我相信你的假设是正确的(无放回的简单随机抽样)。
使用 proc surveyselect
的主要优点是它使代码更容易让其他人理解它在做什么。当然,当有一个内置过程可以做完全相同的事情时,为什么还要写一大段代码。
您应该对代码进行的一项添加是添加一个种子,以便将来在必要时可以复制相同的结果。不将其放入是非常糟糕的做法,例如,您将永远无法使用您发布的代码复制相同的 758 行。
最后一点,如果您决定坚持使用代码,请考虑从 ranuni
切换到 rand
。 Rand
是 ranuni
的更新版本(使用改进的随机数算法),因此 SAS 可能会支持更长的时间。
我是 SAS 的新手,我继承了一段代码,其中 select 行来自样本帧,并将它们作为样本放入另一个数据集中。 758 是它采样的行数。 srno 似乎是一个简单的序列号系统。
data FinalSample;
srno=0;
SampSize = 758;
ObsLeft = Totobs;
do while (SampSize > 0);
PickIt +1;
if ranuni(0) < SampSize / ObsLeft then do;
set SampleFrame point = PickIt nobs = TotObs;
srno = srno + 1;
output;
SampSize = Sampsize - 1;
end;
ObsLeft = ObsLeft - 1;
end;
stop;
run;
在我看来这只是一个简单的随机样本。是这样吗?我想知道如果我要进入 Proc SurveySelect
命令,代码是否会更容易理解。
使用 method = SRS
和 samplesize = 758
的调查 select 上面的代码会有什么不同吗?
非常感谢,
安迪
我相信你的假设是正确的(无放回的简单随机抽样)。
使用 proc surveyselect
的主要优点是它使代码更容易让其他人理解它在做什么。当然,当有一个内置过程可以做完全相同的事情时,为什么还要写一大段代码。
您应该对代码进行的一项添加是添加一个种子,以便将来在必要时可以复制相同的结果。不将其放入是非常糟糕的做法,例如,您将永远无法使用您发布的代码复制相同的 758 行。
最后一点,如果您决定坚持使用代码,请考虑从 ranuni
切换到 rand
。 Rand
是 ranuni
的更新版本(使用改进的随机数算法),因此 SAS 可能会支持更长的时间。