随机地将一组宏分配给一组新的宏

时间:2013-12-22 20:22:56

标签: sas

我正在修改程序的一部分,我需要做的是在循环的每次迭代中将一组宏随机分配给一组不同的宏(无需替换)。所以,例如,假设我有

%let groupa = a
%let groupb = b
%let groupc = c
%let group1 = &groupa;
%let group2 = &groupb;
%let group3 = &groupc;

在这种情况下,我刚刚将group1,group2和group3分配给groupa,groupb和groupc,但我想要的是在循环的每次迭代中,group1,group2和group3被随机分配,无需替换, groupa,groupb或groupc。所以也许下一次迭代是

%let group1 = &groupc;
%let group2 = &groupa;
%let group3 = &groupb;

提前感谢您提供有关如何执行此操作的任何想法,如果需要澄清任何内容,请告知我们。谢谢!

1 个答案:

答案 0 :(得分:0)

试试这个

data rand;
do i=1 to 3;
   r =ranuni(0);
   output;
end;
run;
proc sort data=rand; by r; run;

data _null_;
set rand;
format group $6.;
group = catt("group",i);
if _n_ = 1 then
   call symput(group,"&groupa");
else if _n_ = 2 then 
   call symput(group,"&groupb");
else
   call symput(group,"&groupc");
run;
%put group1: &group1;
%put group2: &group2;
%put group3: &group3;

这会将A,B和C随机分配给groupX变量。 Seed值为0可确保您每次都获得一个新集。