Ответ на ваш вопрос: «Да, это возможно».Но это плохой стиль.Аналогичные результаты, приведенные выше, будут иметь место, если вы просто переместите определение макроса для% Tier_2 за пределы макроса Tier_1, но оставите вызов внутри него.
%macro tier_1();
...
%Tier_2();
%mend tier_1();
%macro tier_2();
...
%mend tier_2;
%tier_1();
Как вы видите выше, вам даже не нужноупорядочить их особым образом - до тех пор, пока оба будут скомпилированы до выполнения макроса, он будет работать нормально.
Единственный раз, когда имеет смысл поместить определение макроса в другое определение макроса, будет, есливнешний макрос каким-то образом изменил внутренний макрос , поэтому необходимо было перекомпилировать внутренний макрос при каждом выполнении внешнего макроса.
Хотя это теоретический вариант использования, я не думаю, что с ним вы, скорее всего, столкнетесь на практике;Есть много других способов изменить вещи без фактического изменения самого макрокода, и поэтому он считается плохим стилем программирования и его следует избегать.Вы добавляете (минимальные, но некоторые) накладные расходы без реальной выгоды и усложняете понимание кода.