我有一个数据集,可以从统一分布中选择随机数。你如何只输出那些行索引?我基本上想要从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;
答案 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;