/* Appendix A */
*** The macro SRS selects a random sample of size n ;
*** from dataset pop without replacement: ;
*** pop: population data set ;
*** sample: resulting simple random sample ;
*** n: sample size ;
*** *************************************************** ;
%macro SRS(pop,sample,n);
%local i j;
data &sample(drop=i j count);
count=0;
array sel_obs(&n) _temporary_;
do i=1 to &n;
redo: select=ceil(ranuni(0)*total);
do j=1 to count;
if sel_obs(j)=select then goto redo;
end;
set &pop point=select nobs=total;
count=count+1;
sel_obs(count)=select;
output;
end;
stop;
run;
%mend;
/* Appendix B */
* Cluster and simple random population (POP_C) ;
data pop_c;
do obn=1 to 500;
x=normal(12345);
if mod(obn,50)<9 then
cluster='ABC0'!!input(left(put(mod(obn,50)+1,2.)),$1.);
else cluster='ABC'!!input(left(put(mod(obn,50)+1,2.)),$2.);
output;
end;
run;
proc means data=pop_c noprint;
var x;
output out=means mean=xmean std=stdx;
proc sort data=pop_c;
by cluster;
data pop_c(keep=cluster x);
if _n_=1 then set means;
set pop_c;
retain xmean stdx;
x=(x-xmean)/stdx;
x=100 + sqrt(50)*x;
run;
* Stratification population (POP_S) ;
data pop_s;
do obn=1 to 500;
x=normal(12345);
if obn<=100 then group='groupA';
else if obn<=250 then group='groupB';
else group='groupC';
output;
end;
run;
* Summary statistics for each stratum. ;
* Group A ;
%let xmeana=100;
%let xvara=25;
* Group B ;
%let xmeanb=90;
%let xvarb=20;
* Group C ;
%let xmeanc=106;
%let xvarc=30;
proc means data=pop_s nway noprint;
class group;
var x;
output out=means mean=xmean std=stdx;
data pop_s(keep=group x);
merge pop_s means;
by group;
x=(x-xmean)/stdx;
if group='groupA' then x=&xmeana+sqrt(&xvara)*x;
else if group='groupB' then x=&xmeanb+sqrt(&xvarb)*x;
else if group='groupC' then x=&xmeanc+sqrt(&xvarc)*x;
run;