|
data a(drop=i j);
array a{10} x1-x10;
do i=1 to 50;
do j=1 to 10;
a(j)=rannor(0);
end;
output;
end;
run;
%macro test(dsin=,dsout=,seed=,vars=, rate=,b=1);
data &dsin;
set &dsin;
seq=_n_;
run;
%let n=%sysfunc(countw(&vars,%str( )));
%do i=1 %to &n;
%let var = %scan(&vars,&i,%str( ));
%syscall ranuni(seed,b);
proc surveyselect data=&dsin(keep=seq &var) out=temp&i method=srs samprate=&rate seed=&seed;
run;
data temp&i;
set temp&i;
call missing(&var);
run;
%end;
data &dsout(drop=seq);
merge &dsin %do i=1 %to &n; temp&i %end;;
by seq;
run;
proc datasets;
delete %do i=1 %to &n; temp&i %end;;
%mend;
%test(dsin=a,dsout=want,seed=123456,vars=%str(x1 x3 x4 x7 x8),rate=0.1);
|