Le script interagit avec le système de fichiers pour lister les programmes SAS dans le répertoire spécifié par `SourcePath`. Il génère ensuite un fichier batch (`.bat`) externe. Aucune donnée SAS (`SASHELP` ou datasets internes créés par le script lui-même) n'est lue ou traitée directement comme source de données par ce script, hormis les noms de fichiers.
1 Bloc de code
Variables Macro
Explication : Déclare les variables macro `SourcePath` pour le chemin du répertoire des programmes SAS et `batch_file_name` pour le nom du fichier batch à générer.
Explication : Définit une macro qui utilise les fonctions de gestion de répertoire SAS (`dopen`, `dread`, `dclose`) pour lister les fichiers du répertoire spécifié. Un DATA STEP filtre ensuite pour ne conserver que les fichiers `.sas` dont le nom ne contient pas "batch", les stockant dans le dataset `filenames`.
Copié !
%macro GetFilenames(location);
filename _dir_ "%bquote(&location.)";
data filenames(keep=memname);
length memname $100.;
handle=dopen( '_dir_' );
if handle > 0 then do;
count=dnum(handle);
do i=1 to count;
memname=dread(handle,i);
output filenames;
end;
end;
rc=dclose(handle);
run;
data filenames;
set filenames;
where index(memname,".sas")>1 & index(memname,"batch")<1;
run;
filename _dir_ clear;
%mend;
%GetFilenames(&SourcePath.);
1
%macro GetFilenames(location);
2
filename _dir_ "%bquote(&location.)";
3
DATA filenames(keep=memname);
4
LENGTH memname $100.;
5
handle=dopen( '_dir_' );
6
IF handle > 0 THENDO;
7
count=dnum(handle);
8
DO i=1 to count;
9
memname=dread(handle,i);
10
OUTPUT filenames;
11
END;
12
END;
13
rc=dclose(handle);
14
RUN;
15
DATA filenames;
16
SET filenames;
17
where index(memname,".sas")>1 & index(memname,"batch")<1;
18
RUN;
19
20
filename _dir_ clear;
21
%mend;
22
23
%GetFilenames(&SourcePath.);
3 Bloc de code
DATA STEP / FILENAME
Explication : Initialise le fichier batch de sortie. Un dataset vide est créé puis utilisé pour écrire une seule ligne vide dans le fichier batch, le réinitialisant efficacement. Le `filename outfile` définit le chemin complet du fichier batch.
Copié !
/*SourcePath - Program path and the batch file output path*/
/*
Reads the .sas files in &location.
*/
/*To reset all content */
data empty;
stop;
run;
filename outfile "&SourcePath.\&batch_file_name.";
data _null_;
set empty;
file outfile;
put;
run;
1
/*SourcePath - Program path and the batch file output path*/
Explication : Crée le dataset `pg_list__` à partir de `filenames`. Pour chaque nom de fichier (`memname`), il crée une chaîne `program1` qui est le nom du fichier entouré de guillemets doubles, adapté pour une commande batch. Il supprime ensuite les entrées qui contiennent "Check_all_logs".
Copié !
data pg_list__;
set filenames;
program1=strip(cats('"',memname,'"'));
memname=strip(memname);
if index(program1,"Check_all_logs")>1 then delete;
run;
1
DATA pg_list__;
2
SET filenames;
3
program1=strip(cats('"',memname,'"'));
4
memname=strip(memname);
5
IF index(program1,"Check_all_logs")>1THEN delete;
6
RUN;
5 Bloc de code
PROC SQL
Explication : Compte le nombre de programmes SAS à exécuter (stockés dans `pg_list__`) et affiche ce total dans le log SAS via `%put`.
Copié !
proc sql noprint;
select count(program1) into :pg_count from pg_list__;
quit;
%put "Total No of programs=&pg_count";
1
PROC SQL noprint;
2
select count(program1) into :pg_count from pg_list__;
3
QUIT;
4
5
%put "Total No of programs=&pg_count";
6 Bloc de code
DATA STEP Data
Explication : Écrit les premières lignes dans le fichier batch. Ceci inclut une ligne avec ` @code_sas_json_prod/dsc_echofile_tolog.json off` qui semble être une référence malformée à un fichier ou une commande, puis une instruction `echo` descriptive et une commande `pause` pour attendre une interaction utilisateur.
Copié !
data pg_list_;
file "&SourcePath.\&batch_file_name." ;
put ' @code_sas_json_prod/dsc_echofile_tolog.json off';
put 'echo This batch file will run all programs in directory';
put 'pause';
run;
1
DATA pg_list_;
2
file "&SourcePath.\&batch_file_name." ;
3
put ' @code_sas_json_prod/dsc_echofile_tolog.json off';
4
put 'echo This batch file will run all programs in directory';
5
put 'pause';
6
RUN;
7 Bloc de code
DATA STEP Data
Explication : Itère sur le dataset `pg_list__` pour ajouter à la fin du fichier batch une commande `call` pour exécuter chaque programme SAS via `SAS.exe`. Une logique conditionnelle `if flag="NO"` est présente pour commenter (`::`) l'appel, mais la variable `flag` n'est pas définie dans le script.
Copié !
data _null_;
set pg_list__;
file "&SourcePath.\&batch_file_name." mod ;
put 'call "D:\Program Files\SASHome\SASFoundation\9.4\SAS.exe" -sysin ' program1;
if flag="NO" then do;
put '::call "D:\Program Files\SASHome\SASFoundation\9.4\SAS.exe" -sysin ' program1;
end;
run;
1
DATA _null_;
2
SET pg_list__;
3
file "&SourcePath.\&batch_file_name." mod ;
4
put 'call "D:\Program Files\SASHome\SASFoundation\9.4\SAS.exe" -sysin ' program1;
5
IF flag="NO"THENDO;
6
put '::call "D:\Program Files\SASHome\SASFoundation\9.4\SAS.exe" -sysin ' program1;
7
END;
8
RUN;
8 Bloc de code
DATA STEP Data
Explication : Ajoute une dernière commande au fichier batch pour exécuter le programme `Check_all_logs.sas`.
Copié !
data _null_;
file "&SourcePath.\&batch_file_name." mod ;
put 'call "D:\Program Files\SASHome\SASFoundation\9.4\SAS.exe" -sysin "Check_all_logs.sas " ';
run;
1
DATA _null_;
2
file "&SourcePath.\&batch_file_name." mod ;
3
put 'call "D:\Program Files\SASHome\SASFoundation\9.4\SAS.exe" -sysin "Check_all_logs.sas " ';
4
RUN;
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.
« L'intérêt majeur de ce script est sa capacité d'auto-découverte : en scannant dynamiquement le répertoire via les fonctions DOPEN et DREAD, il s'adapte automatiquement à l'ajout ou à la suppression de fichiers sans intervention humaine. La génération d'un fichier .bat centralisé permet de transformer un dossier de travail en un pipeline d'exécution ordonné, tout en incluant une étape cruciale de contrôle final avec le programme Check_all_logs.sas »
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.