随机选择序列中的数字,并根据预定义的频率分布保存为观察值

时间:2014-08-13 18:59:40

标签: sas

我想从1:8的序列中随机选取数字,并将选取的数字保存为SAS数据集中新变量的观测值。 1到8中的每个数字都将获得相同的机会(0.125)。因此,一旦生成了新变量并且我对变量运行了proc freq,我将得到序列中每个数字的接近频率分布约12.5%。

R等价物使用sample()函数:

x <- sample(1:8, 1000, replace=T, 
                       prob=c(.125, .125, .125, .125, .125, .125, .125, .125)) 

但是我怎么能在SAS中做到这一点?非常感谢!

1 个答案:

答案 0 :(得分:4)

SAS具有rand功能,可以生成任意数量的分发。 uniform发行版听起来就像你想要的那样。产生0:1,所以你只需将其修改为1:8。

data want;
 call streaminit(7);  *initialize random stream, pick whatever positive seed you want;
 do _n_=1 to 1000; *do 1000 times;
   x = ceil(rand('Uniform')*8);
   output;
 end;
run;

另一种方法是'Table'方法,它更直接类似于r函数。

data want;
 call streaminit(7);
 do _n_ = 1 to 1000;
  x = rand('Table',.125,.125,.125,.125,.125,.125,.125,.125);
  output;
 end;
run;

proc freq data=want;
table x;
run;

但是,在这种情况下Uniform也应该这样做。

请注意,此方法(Uniform)在顶端略微偏向:因为它不能产生1,8,所以将比1到7更频繁地发生频率。(1是0