2013-12-22 29 views
0

我正在修改一個程序段,我需要做的是隨機分配一組宏到一個循環的每次迭代中的一組不同的宏(無需更換)。因此,舉例來說,假設我有隨機分配一組宏到一組新的宏

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

在這種情況下,我剛剛分配到組1,第2組和第3組,以組A,B族和C組,但我要的是一個循環,1組的每個迭代, group2和group3被隨機分配到grouppa,groupb或groupc。所以,也許下一次迭代是不是

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

預先感謝您對如何做到這一點,讓我知道,如果我需要澄清什麼任何想法。謝謝!

+0

這聽起來像是一個非常糟糕的主意,因爲它聽起來像是在數據/處理步驟中可以更高效地完成的任務。我會建議更多地解釋爲什麼你要這樣做,我們可以闡述一個更有效的整體解決方案。 – Joe

回答

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變量。 0的種子值確保您每次都獲得一個新的集合。

+0

非常感謝,這非常有幫助。 –

+0

很高興幫助。如果它回答你的問題,請標記。 – DomPazz