SAS Helpful Hints
Biostat Macro Library
Generate a balanced list of random numbers from 1 to N.
Often used for generating treatment assignments.
%Macro randomlist(anary,ttemp,ssiz,rrange,sseed);
* Create an array of sequential numbers (1->ssiz);
* Create an array of random numbers;
Do ii=1 To &ssiz;
&anary{ii}=ii;
Call Ranuni(&sseed,&ttemp{ii});
End;
* Sort the array of sequential numbers(anary)
so that the
random
numbers appear to be in order;
Do ii=1 To &ssiz-1;
Do jj=ii+1 To &ssiz;
If
&ttemp{&anary{ii}}>&ttemp{&anary{jj}} Then Do;
ttmp=&anary{ii};
&anary{ii}=&anary{jj};
&anary{jj}=ttmp;
End;
End; * jj;
End; * ii;
* The "sequential" numbers(anary)
are now randomized;
Do ii=1 To &ssiz;
&anary{ii}=mod(&anary{ii},&rrange)+1;
End;
%Mend randomlist;
%Let msize=6;
Data work.A;
Retain stratas 10 size &msize range 3
seed 80800;
Array randm{&msize};
Array temp{&msize};
id=200;
Do strata=1 To stratas; * For each strata;
%randomlist(randm,temp,size,range,seed);
Do i=1 To size;
id=id+1;
treat=randm{i};
Output
work.A;
End; * i;
End; * stratas;
Keep strata id treat;
Label treat='Treatment';
Run;
Please send your comments and suggestions about this web page to A. Watts
(watts@bst.rochester.edu)
|