【发布时间】:2017-04-03 12:05:36
【问题描述】:
我正在尝试为组内的每个观察值分配相同的随机数。因此,在下面的数据集中,变量“random”的值对于 gp=B 的每个观测值都是相等的,并且对于 gp=A 的每个观测值将取另一个值,依此类推。
data test ;
input gp $ a b c ;
datalines;
B 2 2 3
B 2 2 3
A 1 2 3
A 1 2 3
C 3 3 4
C 3 3 4
;
我愚蠢地尝试根据每个组的共同唯一值为每个组创建不同的种子:
data test2 ;
set test ;
seed = a*b*c ;
random = ranuni(seed) ;
run ;
这为每个组创建了一个共同的起点,但显然每次观察都会改变。
如何获得组中每个观察值的随机数?由于真实数据集的规模非常大,我希望避免任何排序或其他耗时的过程。
因此,所需的数据集看起来像:
data want ;
input gp $ a b c random ;
datalines;
B 2 2 3 0.123
B 2 2 3 0.123
A 1 2 3 0.456
A 1 2 3 0.456
C 3 3 4 0.789
C 3 3 4 0.789
;
【问题讨论】:
-
数据的逻辑顺序是否如图所示?
-
数据按照每个组的ID排序。
-
如果您使用
ranuni函数,更改种子不会更改随机数流。只有call ranuni允许您修改流中间数据步骤。在第一行/迭代之后,seed调用绝对没有任何作用。