Alle in diesem Skript verwendeten Daten werden intern generiert oder dynamisch erstellt. Das Programm `testprog` wird in eine temporäre Datei geschrieben. Der Datensatz `work.inputjobs` wird über einen DATA Step im Skript erstellt. Die Ausgaben (`work.results`, `myjoblog`) sind ebenfalls Produkte der internen Ausführung des Skripts.
1 Codeblock
DATA STEP Data
Erklärung : Dieser Block erstellt eine temporäre SAS-Datei namens `testprog` und schreibt ein SAS-Programm hinein. Dieses interne Programm ist ein einfacher DATA Step, der Zufallszahlen und Beobachtungen basierend auf Makrovariablen (`¯ovar1`, `¯ovar2`) und Kontextinformationen (`&_program`, `&flow_id`) generiert. Die Datei `testprog` dient als Codequelle für später definierte SAS-Jobs, was eine parametrisierbare und wiederverwendbare Ausführung ermöglicht.
Kopiert!
filename testprog temp;
data _null_;
file testprog;
put '%put this is job: &_program;'
/ '%put this was run in flow &flow_id;'
/ 'data ;'
/ ' rval=rand("uniform");'
/ ' rand=rval*¯ovar1;'
/ ' do x=1 to rand;'
/ ' y=rand*¯ovar2;'
/ ' output;'
/ ' end;'
/ 'run;'
;
run;
1
filename testprog temp;
2
DATA _null_;
3
file testprog;
4
put '%put this is job: &_program;'
5
/ '%put this was run in flow &flow_id;'
6
/ 'data ;'
7
/ ' rval=rand("uniform");'
8
/ ' rand=rval*¯ovar1;'
9
/ ' do x=1 to rand;'
10
/ ' y=rand*¯ovar2;'
11
/ ' output;'
12
/ ' end;'
13
/ 'run;'
14
;
15
RUN;
2 Codeblock
Macro mv_createjob
Erklärung : Diese beiden Aufrufe des Makros `%mv_createjob` registrieren die SAS-Programme in `testprog` als zwei separate ausführbare Jobs mit den Namen `demo1` und `demo2` im Pfad `/Public/temp`. Dieser Schritt ist entscheidend für die Vorbereitung der Aufgaben, die anschließend vom Makro `mv_jobflow` orchestriert werden. Diese Jobs sind nun bereit, innerhalb eines Workflows referenziert und ausgeführt zu werden.
Erklärung : Dieser DATA Step erstellt den Datensatz `work.inputjobs`, der die Eingabequelle für das Makro `%mv_jobflow` ist. Er definiert einen Ausführungskontext ('SAS Job Execution compute context') und spezifiziert die Details für mehrere Ausführungen der Jobs `demo1` und `demo2` innerhalb von zwei Flows (`flow_id` 1 und 2). Für jeden Job werden unterschiedliche Werte für `macrovar1` und `macrovar2` definiert, wodurch die einzelnen Jobausführungen im Flow parametrisiert werden.
Kopiert!
data work.inputjobs;
_contextName='SAS Job Execution compute context';
do flow_id=1 to 2;
do i=1 to 4;
_program='/Public/temp/demo1';
macrovar1=10*i;
macrovar2=4*i;
output;
i+1;
_program='/Public/temp/demo2';
macrovar1=40*i;
macrovar2=44*i;
output;
end;
end;
run;
1
DATA work.inputjobs;
2
_contextName='SAS Job Execution compute context';
3
DO flow_id=1 to 2;
4
DO i=1 to 4;
5
_program='/Public/temp/demo1';
6
macrovar1=10*i;
7
macrovar2=4*i;
8
OUTPUT;
9
i+1;
10
_program='/Public/temp/demo2';
11
macrovar1=40*i;
12
macrovar2=44*i;
13
OUTPUT;
14
END;
15
END;
16
RUN;
4 Codeblock
Macro mv_jobflow
Erklärung : Dieser Block ist der Hauptausführungsschritt des Workflows. Das Makro `%mv_jobflow` wird mit `work.inputjobs` als Quelle der Aufgabendefinitionen aufgerufen. Es ist konfiguriert, die Jobs mit maximal 2 gleichzeitig laufenden Jobs (`maxconcurrency=2`) auszuführen, die Ergebnisse im Datensatz `work.results` zu speichern und eine detaillierte Logdatei namens `myjoblog` zu generieren. Die Option `raise_err=1` ist aktiviert, damit alle Jobfehler über den Systemrückgabecode gemeldet werden. Die `%put`-Nachrichten zeigen den Wert von `syscc` vor und nach der Flow-Ausführung an.
Erklärung : Dieser DATA Step liest den Inhalt der Datei `myjoblog`, die vom Makro `%mv_jobflow` generiert wird und Details zur Ausführung des Job-Flows (Status, Fehler usw.) enthält. Anschließend wird jede Zeile dieser Datei direkt im SAS-Log angezeigt. Dies ermöglicht eine vollständige Nachinspektion des Ablaufs und der Ergebnisse des Workflows.
Kopiert!
data _null_;
infile myjoblog;
input; put _infile_;
run;
1
DATA _null_;
2
INFILE myjoblog;
3
INPUT; put _infile_;
4
RUN;
6 Codeblock
Macro mp_assert
Erklärung : Dieser Block verwendet das Makro `%mp_assert`, um eine Nachausführungsprüfung durchzuführen. Er bewertet die Bedingung `&syscc eq 0`, was bedeutet, dass der Systemrückgabecode Null sein sollte, was darauf hinweist, dass der gesamte Job-Flow fehlerfrei ausgeführt wurde. Der Parameter `desc` liefert eine textuelle Beschreibung der Assertion, nützlich für das Debugging und die Testberichterstattung.
Kopiert!
%mp_assert(
iftrue=(&syscc eq 0),
desc=Check that a zero return code is returned if no called job fails
)
1
%mp_assert(
2
iftrue=(&syscc eq 0),
3
desc=Check that a zero return code is returned IF no called job fails
4
)
Dieses Material wird von We Are Cas "wie besehen" zur Verfügung gestellt. Es gibt keine ausdrücklichen oder stillschweigenden Garantien hinsichtlich der Marktgängigkeit oder Eignung für einen bestimmten Zweck in Bezug auf die hierin enthaltenen Materialien oder Codes. We Are Cas ist nicht verantwortlich für Fehler in diesem Material, wie es jetzt existiert oder existieren wird, noch bietet We Are Cas technischen Support dafür an.
SAS und alle anderen Produkt- oder Dienstleistungsnamen von SAS Institute Inc. sind eingetragene Marken oder Marken von SAS Institute Inc. in den USA und anderen Ländern. ® zeigt die Registrierung in den USA an. WeAreCAS ist eine unabhängige Community-Site und nicht mit SAS Institute Inc. verbunden.
Diese Website verwendet technische und analytische Cookies, um Ihre Erfahrung zu verbessern.
Mehr erfahren.