Makros "überschreiben" und "Parent"-Makro rufen?

Hat jemand eine Idee, wie man ein existierendes Makro neu definieren und aus dem neuen Makro das alte rufen kann, ähnlich wie in objektorientierten Sprachen eine überschriebene Methode ihre Parent-Methode rufen kann?

Ziel ist also so etwas:

%macro x; /* alt */
  
%put Ich tu was.;
%mend;

%macro x; /* neu */
  
%x; /* hier soll aber die ALTE Version gerufen werden! */
  
%put Ich tu was zusätzliches.;
%mend;

Geht leider nicht

Sowas geht leider nicht.
Der Macro-Preprozessor kennt immer nur einen Namen für genau ein Macro.
Einen Kontext, wie die Klassen einer objektorientierten Sprache sind hier unbekannt.

Man muss einen neuen Namen wählen - oder den alten Code mit übernehmen.

alten Code übernehmen

Das mit dem alten Code übernehmen war auch meine Idee, nur wo bekomme ich den Code des alten Makros im Moment der Kompilierung des neuen Makros her?

Kann man den aus dem kompilierten alten Makro, z.B. aus dem Makrokatalog, extrahieren?

Es nützt ja leider nicht viel, wenn das alte Makro x in einer Codedatei x.sas vorliegt, z.B. als Autocallmakro, denn ich kann im neuen Makro ja nicht %include "x.sas" sagen, weil in x.sas ja wieder %macro x... steht...

so allgemein ist das zu schwierig

Hallo Herr Heitzig,
ich habe noch nicht verstanden, was sie erreichen wollen. Es gibt bei Macros so viele Sonderfälle und Situationen, dass eine allgemeine Anleitung nicht möglich ist.

Die einfachste und m.E. beste Lösung ist ein neuer Name:

%macro macNeu(par1,par2=hallo);
  
* Sas-Anweisungen;
  
%macAlt(&par1,par2=&par2);
  
* Und weiter gehts;
%mend;

Aber, wenn ich Sie richtig verstanden habe, gibt es Programme, die %macAlt() aufrufen, und deren Verarbeitung durch das Überschreiben des Macros geändert werden soll. Das geht nur, wenn man vorher, beim Programmieren, den Programm-Code aus macAlt.sas kopiert und anpasst.

Jetzt kommt die dritte Variante ins Spiel: Wenn %macAlt in zwei Versionen verwendet werden soll, aber das ursprüngliche %macAlt weiter gepflegt wird: Wenn man die gemeinsam genutzte Funktion in das Macro %mac0 auslagert, können beide Versionen von %macAlt dasselbe %mac0 aufrufen und den Rest anders implementieren.