Thank you @Tom for the detailed answer. The main purpose was to understand the macro logic a bit better. Especially the macro variable definitions in a local environment using proc sql, call symputx and %let statement. In this regard your answer was perfectly explaining why call symputx can not work under this setting. Yet I was wondering, why does the same logic not apply to the %let statement? I tried following code which did the job: %macro Hatchery (Eggs = 6);
data crap.hatchery;
%do index= 1 %to 3;
%put NOTE: &Eggs.;
Larva +1;
%let Eggs = %eval(&Eggs. - 1);
call symputx("Larva", Larva);
%end;
run;
%mend Hatchery;
%Hatchery Is it because the %let statement is directly processed in the macro processor and the symbol table is immediately updated after each iteration? I guess in contrast to that I get similar results to call symputx with proc sql select into clause as you described. My guess is that Macro processor is not triggered by either call symputx nor select into (proc sql) which are instead resolved as you described only after compilation. data crap.hatchery;
Larva +1;
call symputx("Eggs", 5);
call symputx("Larva", Larva);
Larva +1;
call symputx("Eggs", 5);
call symputx("Larva", Larva);
Larva +1;
call symputx("Eggs", 5);
call symputx("Larva", Larva);
run; Thanks again, now I have only to find out how I can mark your answer as solution as well.
... View more