SAS:如何知道哪个宏称为当前宏?
SAS: how to know which Macro called current Macro?
假设某个宏M1被另一个宏调用并正在执行。有没有一种方法可以访问在那个特定实例中调用 M1 的宏的名称,而调用宏没有被显式编程以传递该信息?
我查看了 SAS 自动宏变量列表,但没有找到我想要的。
使用新的 %sysmexecdepth
和 %sysmexecname()
函数。
示例:
%macro mymac;
%put My name is : &sysmacroname;
%put My depth is : %sysmexecdepth;
%put My name is : %sysmexecname(%sysmexecdepth);
%put My parent is named : %sysmexecname(%sysmexecdepth-1);
%mend mymac;
%mymac;
注意:如果您尝试在输出字符串中使用这些函数,请小心。他们有 "eating" 个 space 在他们面前的恶习。请注意宏生成的第一行和其他行之间的区别。第一个保留冒号后的 space,其他的则不。
My name is : MYMAC
My depth is :1
My name is :MYMAC
My parent is named :OPEN CODE
假设某个宏M1被另一个宏调用并正在执行。有没有一种方法可以访问在那个特定实例中调用 M1 的宏的名称,而调用宏没有被显式编程以传递该信息?
我查看了 SAS 自动宏变量列表,但没有找到我想要的。
使用新的 %sysmexecdepth
和 %sysmexecname()
函数。
示例:
%macro mymac;
%put My name is : &sysmacroname;
%put My depth is : %sysmexecdepth;
%put My name is : %sysmexecname(%sysmexecdepth);
%put My parent is named : %sysmexecname(%sysmexecdepth-1);
%mend mymac;
%mymac;
注意:如果您尝试在输出字符串中使用这些函数,请小心。他们有 "eating" 个 space 在他们面前的恶习。请注意宏生成的第一行和其他行之间的区别。第一个保留冒号后的 space,其他的则不。
My name is : MYMAC
My depth is :1
My name is :MYMAC
My parent is named :OPEN CODE