Publié le :
Macro CREATION_INTERNE

Macro pour vérifier l'existence d'un dataset

Ce code est également disponible en : Deutsch English Español
En attente de validation
L'objectif de cette macro est de fournir une méthode fiable pour tester l'existence d'un dataset SAS©. Elle accepte le nom du dataset en paramètre positionnel. La logique interne isole d'abord la librairie et le nom du membre. Un traitement spécial est appliqué pour la librairie SASHELP où seule une liste prédéfinie de vues du dictionnaire est considérée comme existante. Pour une librairie spécifiquement nommée 'DB', la macro retourne systématiquement 1 (vrai), agissant comme une solution de contournement pour des datasets virtuels. Pour tous les autres cas, elle construit le chemin physique et utilise des fonctions et macros (%sysfunc(pathname), %_exist) pour vérifier la présence du fichier sur le système, en testant les suffixes de fichier SAS© possibles (par ex: .sas©7bdat, .sastbvw).
Analyse des données

Type : CREATION_INTERNE


La macro elle-même ne lit ni ne crée de données, elle vérifie leur existence. Le bloc de validation, fourni en commentaire, crée des datasets de test temporaires (`WORK.DATA_n`, `PWD.TEST2`) pour vérifier le bon fonctionnement de la macro.

1 Bloc de code
MACRO
Explication :
Définition de la macro _dsexist. Elle prend en argument un nom de dataset. Elle extrait la librairie et le nom de la table, puis applique une logique conditionnelle : un traitement spécifique pour les vues du dictionnaire de la librairie SASHELP, une valeur de retour fixe pour une librairie 'DB', et une vérification de l'existence du fichier physique pour toutes les autres librairies.
Copié !
1%macro _dsexist(arg1, DATA=&arg1);
2 
3%local lib;
4 
5%let lib=%_lib(&DATA);
6%let DATA=%_data(&DATA);
7%*put LIB=&lib;
8%IF &lib=sashelp %THEN %DO;
9 %IF &DATA=vcatalg | &DATA=vcolumn | &DATA=vextfl | &DATA=vindex |
10 &DATA=vmacro | &DATA=vmember | &DATA=voption | &DATA=vtable |
11 &DATA=vtitle | &DATA=vview | &DATA=vsacces | &DATA=vscatlg |
12 &DATA=vslib | &DATA=vstable | &DATA=vstabvw | &DATA=vsview %THEN 1;
13 %ELSE 0;
14%END;
15%ELSE %IF &lib=db %THEN 1;
16%ELSE %DO;
17 %local suffix1 suffix2;
18 %let suffix1=%_suffix;
19 %let suffix2=%scan(&suffix1, 3, %str( ));
20 %let suffix1=%scan(&suffix1, 1, %str( ));
21 %let DATA=%_dir(%sysfunc(pathname(&lib)))&DATA;
22
23 %IF %_exist(&DATA..&suffix1) %THEN 1;
24 %ELSE %IF %LENGTH(&suffix2) & %_exist(&DATA..&suffix2) %THEN 1;
25 %ELSE 0;
26%END;
27 
28%mend _dsexist;
2 Bloc de code
DATA STEP Data
Explication :
Partie du flux de validation (en commentaire). Ce bloc assigne d'abord la librairie 'PWD' au répertoire courant. Ensuite, il crée un dataset vide dans la librairie WORK (nommé automatiquement data1, data2, etc.) et un autre dataset vide nommé 'test2' dans la librairie 'PWD'.
Copié !
1/* uncomment to re-validate
2 
3LIBNAME pwd '.';
4 
5DATA;
6RUN;
7 
8DATA pwd.test2;
9RUN;
3 Bloc de code
MACRO CALL
Explication :
Partie du flux de validation (en commentaire). Ce bloc exécute une série de tests en appelant la macro %_dsexist avec différents types d'entrées (dataset nul, existant, inexistant, dans SASHELP, etc.) pour vérifier que le résultat retourné est correct. Les résultats sont affichés dans le journal SAS via %PUT.
Copié !
1%put ATTN: %_dsexist(_null_);
2%put ATTN: %_dsexist(data1);
3%put ATTN: %_dsexist(sashelp.voption);
4%put ATTN: %_dsexist(sashelp.voption(obs=1.));
5%put ATTN: %_dsexist(sashelp.option);
6%put ATTN: %_dsexist(work.data1);
7%put ATTN: %_dsexist(work.data2);
8%put ATTN: %_dsexist(pwd.test1);
9%put ATTN: %_dsexist(pwd.test2);
10%put ATTN: %_exist(test2.s*);
4 Bloc de code
MACRO CALL
Explication :
Dernière étape du flux de validation (en commentaire). Cet appel à une macro (non fournie) %_delete est destiné à nettoyer l'environnement de test en supprimant le dataset 'pwd.test2' créé précédemment.
Copié !
1%_delete(DATA=pwd.test2);
2 
3*/
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.
Informations de Copyright : Copyright (c) 2001-2025 Rodney Sparapani