全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1300 3
2011-07-22
%macro A;
%do i=1 %to 10;
%macro B;
%end;

macro B;
%do i=1 % to20;
%end;

就是两个宏里面都有这种循环的时候就会有问题,请问如何能改进?如果程序比较小,可以采用不同的命名,如果程序比较大,就不太会注意去检查这种问题了,不知道各位大虾怎么解决,我平时用都是采用宏函数嵌套的形式。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2011-7-22 10:13:25
用 %local

%macro B;
        %local i macro;
        %let macro=B;

         %put %str(   Macro B starts:);

          %do i=1 %to 3;
                  %put %str(      &i: This is macro ¯o);
          %end;

           %put %str(   Macro B ends.);
           %put %str(  );
%mend;


%macro A;
         %local i macro;
         %let macro=A;

          %put Macro A starts:;

           %do i=1 %to 10;
                  %put &i This is Macro ¯o;
                  %put -------------------------------------;
                  %B
            %end;

            %put Macro A ends.;
%mend;

%a
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2011-7-22 10:21:45
Thanks!
忘了,上次还讨论过%global的问题。。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2011-7-23 11:47:06
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<<<";
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群