La réponse à votre question est "oui, c'est possible". Mais c'est un mauvais style. Les mêmes résultats que ci-dessus se produiront si vous déplacez simplement la définition de la macro %Tier_2 à l'extérieur de la macro Tier_1, mais que vous laissez l'appel à l'intérieur de celle-ci.
%macro tier_1();
...
%Tier_2();
%mend tier_1();
%macro tier_2();
...
%mend tier_2;
%tier_1();
Comme vous le voyez ci-dessus, il n'est même pas nécessaire de les ordonner d'une manière particulière - tant que les deux sont compilés avant l'exécution de la macro, cela fonctionnera correctement.
La seule fois où il serait logique de placer une définition de macro à l'intérieur d'une autre définition de macro serait si la macro externe a modifié la macro interne d'une manière ou d'une autre et il était donc nécessaire de recompiler la macro interne chaque fois que la macro externe s'exécutait.
Bien qu'il s'agisse d'un cas d'utilisation théorique, je ne pense pas qu'il soit probable que vous le rencontriez dans la pratique ; il y a beaucoup d'autres façons de modifier les choses sans modifier le code macro lui-même, et en tant que tel, c'est considéré comme un mauvais style de programmation et devrait être évité. Vous ajoutez des frais généraux (minimes, mais certains) pour aucun avantage réel, et vous rendez le code plus difficile à comprendre.