SAS:如何知道哪个宏称为当前宏?

SAS:如何知道哪个宏称为当前宏?,sas,sas-macro,Sas,Sas Macro,假设某个宏M1被另一个宏调用并正在执行。是否有一种方法可以访问在该特定实例中调用M1的宏的名称,而无需显式编程调用宏来传递该信息 我已经查看了SAS自动宏变量列表,但没有找到我想要的。使用新的%sysmexecdepth和%sysmexecname()函数 例如: %macro mymac; %put My name is : &sysmacroname; %put My depth is : %sysmexecdepth; %put My name is : %sysmex

假设某个宏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;
注意:如果您试图在输出字符串中使用这些函数,请小心。他们有一个讨厌的习惯,就是“吃”前面的空间。请注意宏生成的第一行和其他行之间的差异。第一个保留冒号后的空格,其他的不保留

My name is : MYMAC
My depth is :1
My name is :MYMAC
My parent is named :OPEN CODE

工作起来很有魅力!同时也感谢大家对“吃过的”空白的提醒。这似乎足以解决该问题:%let depth=%sysmexecdepth;%将我的深度设置为:&depth@汤姆,你有没有向SAS支持部门报告过进食障碍?这是他们应该修复的东西,而不是让它腐烂。我报告了。不确定他们是否会修复。