Toutes les données utilisées dans ce script sont générées en interne ou créées dynamiquement. Le programme `testprog` est écrit dans un fichier temporaire. Le jeu de données `work.inputjobs` est créé via un DATA step dans le script. Les sorties (`work.results`, `myjoblog`) sont également des produits de l'exécution interne du script.
1 Bloc de code
DATA STEP Data
Explication : Ce bloc crée un fichier SAS temporaire nommé `testprog` et y écrit un programme SAS. Ce programme interne est un DATA step simple qui génère des nombres aléatoires et des observations basées sur des macro-variables (`¯ovar1`, `¯ovar2`) et des informations de contexte (`&_program`, `&flow_id`). Le fichier `testprog` servira de source de code pour les jobs SAS définis ultérieurement, permettant une exécution paramétrable et réutilisable.
Copié !
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 Bloc de code
Macro mv_createjob
Explication : Ces deux appels à la macro `%mv_createjob` enregistrent les programmes SAS dans `testprog` comme deux jobs exécutables distincts, nommés `demo1` et `demo2`, dans le chemin `/Public/temp`. Cette étape est cruciale pour préparer les tâches qui seront ensuite orchestrées par la macro `mv_jobflow`. Ces jobs sont maintenant prêts à être référencés et exécutés au sein d'un flux de travail.
Explication : Ce DATA step construit le jeu de données `work.inputjobs`, qui est la source d'entrée pour la macro `%mv_jobflow`. Il définit un contexte d'exécution ('SAS Job Execution compute context') et spécifie les détails pour plusieurs exécutions des jobs `demo1` et `demo2` au sein de deux flux (`flow_id` 1 et 2). Pour chaque job, différentes valeurs de `macrovar1` et `macrovar2` sont définies, paramétrant ainsi les exécutions individuelles des jobs dans le flux.
Copié !
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 Bloc de code
Macro mv_jobflow
Explication : Ce bloc est l'étape d'exécution principale du flux de travail. La macro `%mv_jobflow` est appelée avec `work.inputjobs` comme source des définitions de tâches. Elle est configurée pour exécuter les jobs avec un maximum de 2 jobs concurrents (`maxconcurrency=2`), stocker les résultats dans le jeu de données `work.results`, et générer un fichier de log détaillé nommé `myjoblog`. L'option `raise_err=1` est activée pour que toute erreur de job soit signalée par le code de retour système. Les messages `%put` affichent la valeur de `syscc` avant et après l'exécution du flux.
Explication : Ce DATA step lit le contenu du fichier `myjoblog`, qui est généré par la macro `%mv_jobflow` et contient les détails de l'exécution du flux de jobs (statut, erreurs, etc.). Il affiche ensuite chaque ligne de ce fichier directement dans le log SAS. Cela permet une inspection post-exécution complète du déroulement et des résultats du flux de travail.
Copié !
data _null_;
infile myjoblog;
input; put _infile_;
run;
1
DATA _null_;
2
INFILE myjoblog;
3
INPUT; put _infile_;
4
RUN;
6 Bloc de code
Macro mp_assert
Explication : Ce bloc utilise la macro `%mp_assert` pour effectuer une vérification post-exécution. Il évalue la condition `&syscc eq 0`, ce qui signifie que le code de retour système doit être zéro, indiquant que l'ensemble du flux de jobs s'est exécuté sans erreur. Le paramètre `desc` fournit une description textuelle de l'assertion, utile pour le débogage et le reporting des tests.
Copié !
%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
)
Ce matériel est fourni "tel quel" par We Are Cas. Il n'y a aucune garantie, expresse ou implicite, quant à la qualité marchande ou à l'adéquation à un usage particulier concernant le matériel ou le code contenu dans les présentes. We Are Cas n'est pas responsable des erreurs dans ce matériel tel qu'il existe maintenant ou existera, et We Are Cas ne fournit pas de support technique pour celui-ci.
SAS et tous les autres noms de produits ou de services de SAS Institute Inc. sont des marques déposées ou des marques de commerce de SAS Institute Inc. aux États-Unis et dans d'autres pays. ® indique un enregistrement aux États-Unis. WeAreCAS est un site communautaire indépendant et n'est pas affilié à SAS Institute Inc.
Ce site utilise des cookies techniques et analytiques pour améliorer votre expérience.
En savoir plus.