Bedingte Abarbeitung von Code

Guten Tag,

ich möchte ein SAS-Programm zweimal im Monat laufen lassen. Einmal wird ein kompletter Datenbestand verarbeitet und einmal nur ein Teil davon. Da das Programm beides Mal dasselbe tut, soll der Teil, der die zusätzlichen Daten aufruft nur dann laufen, wenn komplett verarbeitet werden soll.

Beispiel:

/* SAS-Befehle, Macro-Definition */
......

/* Aufruf der Verarbeitung */
%Berechnungs(Daten1);
%Berechnungs(Daten2);
%Berechnungs(Daten3);

/* Programmende */

Ich habe nun mit einigen Varianten versucht, den zweiten und dritten Aufruf nur dann auszuführen, wenn er benötigt wird. Z.B.:

/* SAS-Befehle, Macro-Definition */
%let Verarbeitung=voll;
......

/* Aufruf der Verarbeitung */
%Berechnungs(Daten1);

if &Verarbeitung.=voll then do;
%Berechnungs(Daten2);
%Berechnungs(Daten3);
%end;

/* Programmende */

Weder diese Syntax, noch der Versuch über %if, noch das einbetten in einen datastep (data _Null_) hat funktioniert. In der Regel gibt es einen Syntaxfehler oder der Befehl ist an der Stelle nicht zulässig.

Wie kann ich eine bedingte Ausführung der Makroaufrufe erreichen?

Gruß, Jürgen Schreurs

Makro

Mit einer Makrodefinition geht es:

%macro verarb();

%Berechnungs(Daten1);
%if &Verarbeitung.=voll then do;
   %Berechnungs(Daten2);
   %Berechnungs(Daten3);
%end;

%mend verarb;

%let Verarbeitung=;
%verarb()  
/* nicht volle Verarbeitung */
%let Verarbeitung=voll;
%verarb()  
/* volle Verarbeitung */
Oder mit einem Makroparameter:
%macro verarb(verarbeitung=);

%Berechnungs(Daten1);
%if &Verarbeitung.=voll then do;
   %Berechnungs(Daten2);
   %Berechnungs(Daten3);
%end;

%mend verarb;

%verarb()                  
/* nicht volle Verarbeitung */
%verarb(verarbeitung=voll) /* volle Verarbeitung */

Der Unterschied zwischen den beiden Varianten ist nur, dass einmal die Makrovariable verarbeitung global mit %LET definiert wird und einmal als lokaler Makroparameter.

Funktioniert

Hallo Herr Mangold,

eingebaut, getestet und funtkioniert.
Vielen Dank.

Ich habe die Variante 1 gewählt, da wir ohnehin am Anfang des Programms einige Parameter setzten.

Jürgen Schreurs