SAS: как узнать, какой макрос называется текущим макросом? - PullRequest
2 голосов
/ 29 марта 2020

Представьте, что определенный макрос M1 был вызван другим макросом и выполняется. Есть ли способ получить доступ к имени макроса, который вызвал M1 в этом конкретном c экземпляре, без вызова явно запрограммированного вызывающего макроса для передачи этой информации?

Я изучил Список SAS Automati c Макропеременные и не нашли то, что я хотел.

1 Ответ

4 голосов
/ 29 марта 2020

Используйте новые функции %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
...