wangyf0218 发表于 2011-7-22 09:36 
%macro A;
%do i=1 %to 10;
%macro B;
%end;
macro B;
%do i=1 % to20;
%end;
就是两个宏里面都有这种循环的时候就会有问题,请问如何能改进?如果程序比较小,可以采用不同的命名,如果程序比较大,就不太会注意去检查这种问题了,不知道各位大虾怎么解决,我平时用都是采用宏函数嵌套的形式。
Always use local statements to define the scope of macro variables. It is very important when programs become complicated.
Using macro with parameters so that variables will be written into a loca symbol table.
Here is an example to illustrate the idea.
%macro A(dummy);
%local i x;
%let x=out;
%do i=1 %to 3;
%put;
%put ">>>i=&i x=&x<<<";
%B(dummy)
%end;
%mend;
%macro B(dummy);
%local i x;
%let x=in;
%put "in-- loop";
%do i=1 %to 5;
%put ">>>i=&i x=&x<<<";
%end;
%mend;
%put ">>>i=&i x=&x<<<";
%A(dummy)
%put ">>>i=&i x=&x<<<";