我想从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中做到这一点?非常感谢!
答案 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