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