如何从SAS数据集输出随机观察集

时间:2014-01-29 22:11:49

标签: sas

我有一个数据集,可以从统一分布中选择随机数。你如何只输出那些行索引?我基本上想要从SAS数据集中选择一组随机行。

data Unif(keep=u x k n m);
call streaminit(123);
a = -1; b = 1;
Min = 1; Max = 28000000;
do i = 1 to &NObs;
   u = rand("Uniform");    /* U[0,1] */
   x = a + (b-a)*u;        /* U[a,b] */
   k = ceil( Max*u );      /* uniform integer in 1..Max */
   n = floor( (1+Max)*u ); /* uniform integer in 0..Max */
   m = min + floor((1+Max-Min)*u); /* uniform integer in Min..Max */
   output;
end;
keep k
run;
     *not sure about this part;
    data final;
     set final;
     where obs in (k);
   run;

1 个答案:

答案 0 :(得分:0)

执行此操作的最佳方法是使用PROC SURVEYSELECT

proc surveyselect data=final out=selected seed=123 n=10;
run;

或者根据你想要的方式运行它们 - the documentation有关于如何执行采样的各种选项的详细信息。

如果您想在datastep中执行此操作,则需要以某种方式在第二个datastep内运行Unif中的代码。我并不完全遵循它想要做的事情;如果这是一种k / n采样形式,则搜索SAS k / n采样'而且你会发现很多,因为它是一个常见的问题,但一般的方法是

data final_selected;
set final;
... code to determine if it should be selected...
if (condition); *subsetting if;
run;