我想从 1:8 的序列中随机选取数字并将选取的数字保存为 SAS 数据集中新变量的观察结果。 1 到 8 中的每个数字都将有相同的机会被选中(0.125)。因此,一旦生成新变量并且我对该变量运行 proc freq,我将获得序列中每个数字约 12.5% 的接近频率分布。使用 sample() 函数的 R 等价物是这样的:x <- sample(1:8, 1000, replace=T, prob=c(.125, .125, .125, .125, .125, .125, .125, .125))但是我怎么能在 SAS 中做到这一点呢?非常感谢! 最佳答案 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关于sas - 根据预定义的频率分布随机选择序列中的数字并保存为观察值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25294089/
10-12 23:06