/* Try this one */
/* the dataset bc1 to bcn are appended together to BC */
data ys; /* sample dataset */
array a{15} a1-a15;
do N = 1 to 2000;
do j = 1 to dim(a);
a(j) = abs(int(normal(123+j+n)*100));
end; output;
end; drop j;
run;
%macro mymacro(dsn=, dout1=, dout2=);
data &dout1(keep=n a1-a15) &dout2 (keep=n a1-a15);
array a{15} a1-a15;
array b{15} b1-b15;
retain b1-b15;
if _n_ = 1 then do;
set &dsn(firstobs=1 obs=1);
output &dout2;
do i = 1 to dim(a);
b(i) = a(i); end; end;
set &dsn;
if _n_^=1 then do;
c = 0;
do i1 = 1 to 15;
do i2 = 1 to 15;
if a(i1) - b(i2) = 0 then do;
c+1; end;
end;
end;
if c = 0 then output &dout1;
end;
drop i;
run;
%mend mymacro;
%macro mymacro2;
%let dsn=ys; %let n1=1; %let nobs=1;
%do %while(&nobs>0);
%let dsn1=ys&n1; %let dsn2=bc&n1;
data _null_;
dsn = "&dsn";
dsn1 = "&dsn1";
dsn2 = "&dsn2";
call execute('%mymacro(dsn='||dsn||', dout1='||dsn1||', dout2='||dsn2||');');
run;
%let dsn=&dsn1;
%let n1 = %eval(&n1+1);
proc sql noprint;
select count(*) into :nobs
from &dsn1;
quit;
proc append base=bc data=&dsn2; run;
%end;
%mend mymacro2;
%mymacro2;
/* or use the %mymacro3 */
%macro mymacro3;
%let dsn=ys;
%let n1=1;
%let nobs=1;
%do %while(&nobs>0);
%let dsn1=ys&n1;
%let dsn2=bc&n1;
%mymacro(dsn=&dsn, dout1=&dsn1, dout2=&dsn2);
%let dsn=&dsn1;
%let n1 = %eval(&n1+1);
proc sql noprint;
select count(*) into :nobs
from &dsn1;
quit;
proc append base=bc data=&dsn2; run;
%end;
%mend mymacro3;
%mymacro3;


雷达卡
京公网安备 11010802022788号







