Cette macro permet de vérifier l'existence d'un fichier `.sashdat` dans une CASLIB. Elle utilise l'action CAS `table.fileinfo` exécutée via `dosubl()` pour récupérer la liste des fichiers. Pour optimiser les performances lors d'appels multiples, le résultat est mis en cache dans une table WORK locale (définie par `outprefix`). La macro retourne 1 si le fichier existe, 0 sinon.
Analyse des données
Type : EXTERNE
Les données proviennent des informations système du serveur CAS (liste des fichiers dans une CASLIB) récupérées via `PROC CAS`.
1 Bloc de code
PROC CAS Data
Explication : Ce bloc conditionnel vérifie si le cache existe. Sinon, il utilise `dosubl` pour exécuter `PROC CAS` et l'action `table.fileinfo` afin de lister les fichiers de la librairie, puis une étape DATA pour filtrer uniquement les fichiers `.sashdat` et créer la table de cache.
Copié !
%if %sysfunc(exist(&outprefix._&lib)) ne 1 %then %do;
%let rc=%sysfunc(dosubl(%nrstr(
/* Read in table list (once per &lib per session) */
proc cas;
table.fileinfo result=source_list /caslib="&lib";
val=findtable(source_list);
saveresult val dataout=&outprefix._&lib;
quit;
/* Only keep name, without file extension */
data &outprefix._&lib;
set &outprefix._&lib(where=(Name like '%.sashdat') keep=Name);
Name=upcase(scan(Name,1,'.'));
run;
)));
%end;
1
%IF %sysfunc(exist(&outprefix._&lib)) ne 1 %THEN %DO;
2
%let rc=%sysfunc(dosubl(%nrstr(
3
/* Read in table list (once per &lib per session) */
4
PROC CAS;
5
TABLE.fileinfo RESULT=source_list /caslib="&lib";
6
val=findtable(source_list);
7
saveresult val dataout=&outprefix._&lib;
8
QUIT;
9
/* Only keep name, without file extension */
10
DATA &outprefix._&lib;
11
SET &outprefix._&lib(where=(Name like '%.sashdat') keep=Name);
12
Name=upcase(scan(Name,1,'.'));
13
RUN;
14
)));
15
%END;
2 Bloc de code
SAS Functions
Explication : Ce bloc interroge la table de cache locale via les fonctions `open` et `fetch` pour vérifier si le nom de la table demandée (`&ds`) est présent, et retourne le résultat booléen (1 ou 0).
Copié !
/* Scan table for hdat existence */
%let dsid=%sysfunc(open(&outprefix._&lib(where=(name="&ds"))));
%syscall set(dsid);
%let rc = %sysfunc(fetch(&dsid));
%let rc = %sysfunc(close(&dsid));
/* Return result */
%if "%trim(&name)"="%trim(&ds)" %then 1;
%else 0;
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.