首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SAS:从宏定义的another...Order中调用一个宏

SAS:从宏定义的another...Order中调用一个宏
EN

Stack Overflow用户
提问于 2009-02-11 15:18:37
回答 4查看 29K关注 0票数 6

在我的代码中,我有几个宏。宏A是主宏。然后,宏A调用宏B,后者又调用宏C。

在SAS中,我必须按倒序定义它们吗?换句话说,我是不是必须先定义宏C,然后定义宏B,最后定义宏A?或者这有什么关系,因为SAS在实际执行命令之前读取所有代码以运行宏?在这个问题上,我可以发出命令来运行宏作为我的代码中的第一个语句,然后在命令下面定义宏吗?

谢谢!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-02-11 17:48:47

首先,您必须在调用宏之前定义它。

其次,只要你事先加载了宏,那么在哪里调用宏并不重要。

详述你的问题: autocall库是你的朋友。如果您的SAS管理员不允许您将宏放入autocall库中,您可以像这样附加autocall:

代码语言:javascript
复制
filename mymacros 'c:\mysas'; 
/*this defines the directory you have stored your macros*/

options sasautos=(sasautos mymacros) mautosource; 
票数 3
EN

Stack Overflow用户

发布于 2009-02-22 17:48:20

在调用宏之前,必须先定义它。出于性能原因,最好不要在另一个宏中定义宏--如果这样做,那么每次调用外部宏时都会重新定义它。下面的代码运行良好:

代码语言:javascript
复制
%macro a;
  %put a;
  %b
%mend a;

%macro b;
  %put b;
  %c
%mend b;

%macro c;
  %put c;
%mend c;

%*-- %a is main --*;
%a
/* on log
a
b
c
*/
票数 3
EN

Stack Overflow用户

发布于 2009-02-11 16:16:18

必须先定义一个宏,然后才能调用它,因此带有"% A“的行将需要遵循宏A的定义。其他宏定义的顺序并不重要,只要它们是在调用之前定义的。通常在我的程序中,我会像你所描述的那样设置一个主宏,然后程序的最后一行调用这个宏。

另一个要考虑的选项是设置宏自动调用库,其中包含许多宏的定义。这最适用于可重用的宏,这样您就不必在每个程序中重新定义它们。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/537283

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档