Random 按组分配随机数
我试图给一组中的每个观察值分配一个相同的随机数。因此,在下面的数据集中,变量“random”的值对于gp=B的每个观察值都相等,并且对于gp=A的每个观察值都取另一个值,依此类推Random 按组分配随机数,random,sas,Random,Sas,我试图给一组中的每个观察值分配一个相同的随机数。因此,在下面的数据集中,变量“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
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
;
这应该可以解决问题,如果你有任何问题,请问我:
proc sort data=test;
by gp;
run;
data test2;
drop seed;
set test;
by gp;
retain random;
if first.gp then do;
seed = a*b*c ;
random = ranuni(seed) ;
end;
run;
基本上,每次你打电话给拉努尼,你都会得到一个新的随机数,所以你只想在id(gp)改变时打电话给它。这应该可以解决问题,如果你有任何问题,请问我:
proc sort data=test;
by gp;
run;
data test2;
drop seed;
set test;
by gp;
retain random;
if first.gp then do;
seed = a*b*c ;
random = ranuni(seed) ;
end;
run;
基本上,每次调用Ranui都会得到一个新的随机数,因此您只想在id(gp)更改时调用它。数据是否按所示的逻辑顺序排列?数据按每个组的id排序。如果使用
Ranui
函数,则更改种子不会更改随机数流。只有call ranuni
允许您修改流中间数据步骤。在第一行/迭代之后,seed
调用there绝对不会执行任何操作。数据是否按所示的逻辑顺序排列?数据按每个组的ID排序。如果使用ranuni
函数,更改seed不会更改随机数流。只有call ranuni
允许您修改流中间数据步骤。seed
调用在第一行/迭代之后绝对不会执行任何操作。您应该删除seed
调用(或将其移出循环),因为它当前除了第一次之外什么都不做。它应该是一个单独的赋值,或者(正确地说,尽管为了简单起见,我有时会跳过它)在if\n_uu=1
块中。使用gp notsorted的会有所不同吗?我要求在这种情况下,删除proc sort
将减少未排序数据集的运行时间。这将起作用。如果你喜欢答案,请勾选复选标记!您应该删除seed
调用(或将其移出循环),因为它当前除了第一次之外什么都不做。它应该是一个单独的赋值,或者(正确地说,尽管为了简单起见,我有时会跳过它)在if\n_uu=1
块中。使用gp notsorted
的会有所不同吗?我要求在这种情况下,删除proc sort
将减少未排序数据集的运行时间。这将起作用。如果你喜欢答案,请勾选复选标记!