使用 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 = SRSsamplesize = 758 的调查 select 上面的代码会有什么不同吗?

非常感谢,

安迪

我相信你的假设是正确的(无放回的简单随机抽样)。

使用 proc surveyselect 的主要优点是它使代码更容易让其他人理解它在做什么。当然,当有一个内置过程可以做完全相同的事情时,为什么还要写一大段代码。

您应该对代码进行的一项添加是添加一个种子,以便将来在必要时可以复制相同的结果。不将其放入是非常糟糕的做法,例如,您将永远无法使用您发布的代码复制相同的 758 行。

最后一点,如果您决定坚持使用代码,请考虑从 ranuni 切换到 randRandranuni 的更新版本(使用改进的随机数算法),因此 SAS 可能会支持更长的时间。