Die Daten werden vollständig intern generiert. Ein temporäres SAS-Programm wird dynamisch mit einem DATA STEP `_null_` erstellt, das in eine `filename temp` schreibt. Die Eingabeparameter für den Job-Flow (`work.inputjobs`) werden ebenfalls durch einen expliziten DATA STEP erstellt. Es werden keine externen Dateien oder SASHELP-Datasets direkt für die Hauptdaten des Skripts gelesen.
1 Codeblock
DATA STEP Data
Erklärung : Dieser SAS-Block erstellt eine temporäre Datei namens `testprog` und schreibt ein SAS-Programm hinein. Dieses Programm simuliert eine Geschäftsanwendung, die Makrovariablen `&_program`, `&flow_id`, `¯ovar1` und `¯ovar2` verwendet. Es enthält eine bedingte Logik, bei der `abort` ausgelöst wird, wenn ein Zufallswert (`rand("uniform")`) größer als 0.50 ist, was einen Jobfehler simuliert. Das Programm generiert auch ein anonymes Dataset, das berechnete Variablen (`rval`, `rand`, `y`) enthält.
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;'
/ ' if (rval>0.50) then abort;'
/ ' else 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
/ ' if (rval>0.50) then abort;'
12
/ ' else output;'
13
/ ' end;'
14
/ 'run;'
15
;
16
RUN;
2 Codeblock
MACRO CALL (mv_createjob)
Erklärung : Ruft das Makro `%mv_createjob` auf, um einen Job namens 'demo1' zu erstellen. Dieser Job wird im Pfad '/Public/temp' (wahrscheinlich ein Ordner in einem CASLIB) gespeichert und verwendet den in der temporären Datei `testprog` generierten SAS-Code als Quelle. Dieses Makro bereitet den Job für eine spätere Ausführung in einem Job-Flow in der SAS Viya-Umgebung vor.
Erklärung : Ruft das Makro `%mv_createjob` erneut auf, um einen zweiten Job namens 'demo2' zu erstellen, der ebenfalls denselben Quellcode (`testprog`) und denselben Speicherpfad wie Job 'demo1' verwendet. Dadurch werden zwei unabhängige Jobs konfiguriert, die von demselben Ausführungsfluss verwaltet werden.
Erklärung : Dieser DATA STEP erstellt das Dataset `work.inputjobs`. Dieses Dataset dient als Kontrolltabelle für den Job-Flow und spezifiziert die Ausführungsparameter für jede Job-Instanz. Es definiert den `_contextName` als 'SAS Job Execution compute context', iteriert über zwei separate `flow_id` und bereitet für jede `flow_id` Ausführungen für 'demo1' und 'demo2' mit unterschiedlichen Werten für `macrovar1` und `macrovar2` vor. Dies ermöglicht das Testen des Job-Verhaltens mit verschiedenen Eingaben und das Simulieren mehrerer Ausführungen.
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;
5 Codeblock
MACRO CALL (%put)
Erklärung : Zeigt den aktuellen Wert der automatischen Variablen `SYSCC` (System Return Code) im SAS-Log an. `SYSCC` enthält den Rückgabecode des letzten System- oder Makroaufrufs und dient hier als Prüfpunkt vor der Ausführung des Job-Flows, um einen bekannten Startzustand sicherzustellen, der bei Erfolg normalerweise 0 ist.
Kopiert!
%put NOTE: &=syscc;
1
%put NOTE: &=syscc;
6 Codeblock
MACRO CALL (mv_jobflow)
Erklärung : Ruft das Makro `%mv_jobflow` auf, um die definierten Jobs auszuführen. Es nimmt `work.inputjobs` als Eingabe-Dataset (`inds`), begrenzt die Parallelität auf 2 Jobs (`maxconcurrency=2`), speichert die Ergebnisse in `work.results` (`outds`) und die Log-Informationen in einem Fileref `myjoblog` (`outref`). Die Option `raise_err=1` ist entscheidend, da sie sicherstellt, dass Fehler, die in den ausgeführten Jobs auftreten, im `SYSCC` des aufrufenden Prozesses widergespiegelt werden, was eine zentralisierte Fehlerbehandlung ermöglicht. `mdebug=1` aktiviert den Debugging-Modus für das Makro, der detaillierte Informationen im Log bereitstellt.
Erklärung : Zeigt den Wert von `SYSCC` nach der Ausführung des Job-Flows an. Dies ermöglicht die Überprüfung, ob Fehler der internen Jobs (die `abort` ausführen können) vom Makro `%mv_jobflow` korrekt erfasst und an den aufrufenden Prozess weitergeleitet wurden und ob der `SYSCC` einen potenziellen Fehler des Flows widerspiegelt.
Kopiert!
%put NOTE: &=syscc;
1
%put NOTE: &=syscc;
8 Codeblock
DATA STEP
Erklärung : Dieser DATA STEP liest den Inhalt der Datei, auf die `myjoblog` verweist (die vom Makro `%mv_jobflow` ausgefüllt wurde und das konsolidierte Log des Job-Flows enthält), und druckt jede Zeile (`_infile_`) in das SAS-Log. Dies ist ein wesentlicher Schritt zur Fehlerbehebung und Überprüfung, um die Nachrichten und Status zu untersuchen, die von den im Flow ausgeführten Jobs generiert wurden.
Kopiert!
data _null_;
infile myjoblog;
input; put _infile_;
run;
1
DATA _null_;
2
INFILE myjoblog;
3
INPUT; put _infile_;
4
RUN;
9 Codeblock
MACRO CALL (mp_assert)
Erklärung : Verwendet das Makro `%mp_assert` (wahrscheinlich ein benutzerdefiniertes Test- oder Assertionsmakro), um eine logische Bedingung zu überprüfen. Hier stellt es sicher, dass die Variable `SYSCC` nicht gleich Null ist, was darauf hindeuten würde, dass ein Fehler im Job-Flow erkannt und weitergeleitet wurde. Die `desc`-Meldung erläutert das Ziel: 'Überprüfen, ob ein Rückgabecode ungleich Null zurückgegeben wird, wenn der aufgerufene Job fehlschlägt'. Diese Assertion ist entscheidend, um die Robustheit der Fehlerbehandlung des Flow-Systems zu validieren.
Kopiert!
%mp_assert(
iftrue=(&syscc ne 0),
desc=Check that non zero return code is returned if called job fails
)
1
%mp_assert(
2
iftrue=(&syscc ne 0),
3
desc=Check that non zero return code is returned IF called job fails
4
)
10 Codeblock
MACRO CALL (%let)
Erklärung : Setzt die automatische Makrovariable `SYSCC` auf Null zurück. Diese Praxis ist am Ende eines Tests oder Codeabschnitts üblich, um zu verhindern, dass der `SYSCC` dieses Abschnitts spätere Überprüfungen oder den allgemeinen Status des Programms beeinflusst.
Kopiert!
%let syscc=0;
1
%let syscc=0;
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.