Look at this example: val_m2 values are not updated form call execute. Regards data have;
do i=1 to 10;
have= i+1;
output;
end;
run;
%macro mymacro(nc);
%Global used mg1 mg2;
%let mg1= 20; %let mg2= 40;
data need; set have nobs= nobs; J= _n_;
var0= J * &mg1 / &mg2;
var1= var0 + 0.5 * &mg1 / &mg2;
var2= var0 + var1;
nexp= var2 * &mg1 / &mg2;
need + (((nexp - have)**2) / nexp); /*cumulative sum*/
if J= nobs then call symput('used',need);
run;
%mend;
data see;
do i= 1 to 3;
if i= 1 then do;
max= 40; min= 15; m1= 27.5;
val_m1= 2; m2= 33.75;
call execute('%mymacro('||m2||')');
val_m2= input(symget('used'), 30.); /*updating*/
end;
else do;
min= m1; m1= m2; val_m1= val_m2; m2= (m2 + max)/2; /*updating*/
call execute('%mymacro('||m2||')');
val_m2 = input(symget('used'), 30.);
end;
output;
end;
run;
... View more