| ||
|
Homepage Unternehmensprofil Angebot Tools Vorträge Gedanken Tips
call execute() Macros mit Hilfe Baumstrukturen Replace Viewtable in V8 Replace Viewtable in V6 Problem mit Dezimalzahlen upload / download Access to Adabas ODS-Tips Ihre Meinung Kontakt |
EinführungDie Funktion call execute() ermöglicht u.a. die Ausführung von Programmen (Macros) über Daten zu steuern. Ein einfaches Beispiel ist das Vergleichen gleichnamiger Dateien in zwei SAS-Libraries:
%macro compare(data1,data2);
title "Vergleiche &data1 und &data2";
Proc compare data=&data1 compare=&data2;
RUN;
%mend;
Proc sql;
create table work.liste
as select memname
from dictionary.tables
where libname="LIB1" and memtype="DATA";
QUIT;
Data _null_;
Set work.liste;
macroCall = '%compare (LIB1.'!!memname!!", LIB2"!!memname!!");";
call execute(macroCall);
RUN;
Mit diesem Programm wird jede Datei aus LIB1 mit der (hoffentlich vorhandenen) Datei in LIB2 verglichen.
ProblemDer Macroaufruf wird bei der Ausführung von call execute() ausgeführt. Eventuell erzeugte Proc- und Datasteps werden aber erst nach dem Ende des Datasteps und dann auch nur nacheinander ausgeführt. Wenn nun das Macro etwas komplexer ist, und die korrekte Ausführung davon abhängt, dass Macro-Anweisungen und Proc/Datasteps in der richtigen Reihenfolge ausgeführt werden, führt die Ausführung des Macros in call execute() zu einem fehlerhaften verhalten. Ein Beispiel wäre die Prüfung des Ergebnisses mit der automatischen Macrovariablen &syserr. Um dieses Problem zu vermeiden, muss die Ausführung des Macros verzögert werden. Das wird mit der Macro-Funktion %nrstr() erreicht. Der Macro-Aufruf wird dann von call execute() wie Text behandelt und erst nach dem Ende des Datasteps vom Program-Manager ausgeführt.
Das folgende Beispiel zeigt den Unterschied.
|
|
|---|---|---|
|
©WS Unternehmensberatung und Controlling-Systeme GmbH
Bergstraße 7 69120 Heidelberg Tel.: 06221 / 401 409
Amtsgericht Heidelberg, HRB 5485 Geschäftsführer: Wilfried Schollenberger | zurück zum Anfang |