楼主: wangyf0218
1052 3

问个问题 [推广有奖]

  • 0关注
  • 0粉丝

本科生

38%

还不是VIP/贵宾

-

威望
0
论坛币
11 个
通用积分
0
学术水平
2 点
热心指数
2 点
信用等级
2 点
经验
886 点
帖子
68
精华
0
在线时间
91 小时
注册时间
2011-7-9
最后登录
2017-3-14

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
%macro A;
%do i=1 %to 10;
%macro B;
%end;

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

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

扫码加我 拉你入群

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

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

关键词:Macro acr Mac CRO End 嵌套 重名 宏函数

沙发
pobel 在职认证  发表于 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
已有 1 人评分论坛币 学术水平 热心指数 收起 理由
liuzhenzhu + 30 + 2 + 2 热心帮助其他会员

总评分: 论坛币 + 30  学术水平 + 2  热心指数 + 2   查看全部评分

和谐拯救危机

使用道具

藤椅
wangyf0218 发表于 2011-7-22 10:21:45 |只看作者 |坛友微信交流群
Thanks!
忘了,上次还讨论过%global的问题。。

使用道具

板凳
bobguy 发表于 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<<<";
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
pobel + 1 + 1 + 1 精彩帖子

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-5-1 11:20