Publié le :
Administration CREATION_INTERNE

Gestion des Erreurs SAS avec Variables Système

En attente de validation
Attention : Ce code nécessite des droits administrateur.
Le script provoque intentionnellement différentes catégories d'erreurs (définition de librairie non valide, instructions FILENAME, appel de procédure inexistante, exécution de commande système inconnue via %SYSEXEC) pour illustrer comment les variables automatiques SAS© (`&sysrc`, `&syserr`, `&sysfilrc`, `&syslibrc`) sont mises à jour. Chaque bloc d'erreur est précédé d'une réinitialisation de ces variables et suit les mêmes patterns de vérification pour la cohérence. Les options `nosource` et `source` sont utilisées pour contrôler l'affichage du code dans le log, et `xsync noxwait` pour s'assurer que `%sysexec` attend le retour de la commande système.
Analyse des données

Type : CREATION_INTERNE


Aucune donnée externe n'est utilisée. Le script utilise un `DATA _NULL_` pour évaluer la fonction `LIBNAME()` et afficher ses codes de retour et messages, illustrant la capture d'erreurs au niveau des fonctions SAS.

1 Bloc de code
MACRO/OPTIONS
Explication :
Ce bloc est une routine de réinitialisation. Il efface la sortie des procédures précédentes via `proc printto`, puis initialise les variables système `sysrc`, `sysfilrc`, et `syslibrc` à zéro. Il affiche également l'état de ces variables pour confirmer la réinitialisation.
Copié !
1** Reset ;
2 
3PROC PRINTTO ;
4 
5RUN ;
6%let sysrc=0 ;
7%let sysfilrc=0 ;
8%let syslibrc=0 ;
9%put Reset: &sysrc &syserr &sysfilrc &syslibrc ;
10**;
11 
2 Bloc de code
LIBNAME/OPTIONS
Explication :
Tente de définir une librairie SAS ('y') vers un chemin non valide ou inexistant (`c:\re`), ce qui est censé provoquer une erreur. Après la tentative, le script désactive temporairement l'affichage du code (`nosource`) pour mettre en évidence les valeurs des variables système d'erreur (`sysrc`, `syserr`, `sysfilrc`, `syslibrc`) qui reflètent le statut de l'opération.
Copié !
1LIBNAME y 'c:e' ;
2options nosource ; %put ; %put ===> Detect an error in a LIBNAME statement ; %put ;
3%put sysrc = &sysrc ;
4%put syserr = &syserr ;
5%put sysfilrc = &sysfilrc ;
6%put syslibrc = &syslibrc ;
7%put ; %put ; options SOURCE ;
3 Bloc de code
DATA STEP Data
Explication :
Ce `DATA _NULL_` utilise la fonction `LIBNAME()` pour tenter de créer une librairie de manière programmatique. Il capture le code de retour (`sysrc`) de l'opération et le message système correspondant (`sysmsg`), puis les affiche dans le log. C'est une méthode alternative pour gérer les erreurs de définition de librairie.
Copié !
1DATA _null_ ;
2 sysrc=LIBNAME('y','c:e') ;
3 sysmsg=sysmsg() ;
4 put sysrc= sysmsg= ;
5RUN ;
4 Bloc de code
MACRO/OPTIONS
Explication :
Réinitialisation des variables système d'erreur, similaire au premier bloc, pour préparer la prochaine démonstration d'erreur.
Copié !
1** Reset ;
2 
3PROC PRINTTO ;
4 
5RUN ;
6%let sysrc=0 ;
7%let sysfilrc=0 ;
8%let syslibrc=0 ;
9%put Reset: &sysrc &syserr &sysfilrc &syslibrc ;
10**;
11 
5 Bloc de code
FILENAME/OPTIONS
Explication :
Les instructions `filename x;` sans chemin effacent ou réinitialisent la référence de fichier `x`. Bien que ces instructions spécifiques ne génèrent généralement pas d'erreurs, ce bloc est conçu pour montrer comment les variables système d'erreur (`sysrc`, `syserr`, `sysfilrc`, `syslibrc`) seraient utilisées pour détecter une erreur si une instruction `filename` incorrecte avait été exécutée.
Copié !
1filename x ;
2filename x ;
3options nosource ; %put ; %put ===> Detect an error in a filename statement ; %put ;
4%put sysrc = &sysrc ;
5%put syserr = &syserr ;
6%put sysfilrc = &sysfilrc ;
7%put syslibrc = &syslibrc ;
8%put ; %put ; options SOURCE ;
6 Bloc de code
MACRO/OPTIONS
Explication :
Réinitialisation des variables système d'erreur pour la prochaine démonstration d'erreur.
Copié !
1** Reset ;
2 
3PROC PRINTTO ;
4 
5RUN ;
6%let sysrc=0 ;
7%let sysfilrc=0 ;
8%let syslibrc=0 ;
9%put Reset: &sysrc &syserr &sysfilrc &syslibrc ;
10**;
11 
7 Bloc de code
PROC UNKNOWN
Explication :
Tente d'exécuter une procédure SAS inexistante (`proc unknown`), ce qui provoque une erreur fatale dans SAS. Le script affiche ensuite les variables système d'erreur pour observer leur état après cette erreur de procédure.
Copié !
1PROC UNKNOWN ;
2RUN ;
3options nosource ; %put ; %put ===> Detect an error in a Procedure ; %put ;
4%put sysrc = &sysrc ;
5%put syserr = &syserr ;
6%put sysfilrc = &sysfilrc ;
7%put syslibrc = &syslibrc ;
8%put ; %put ; options SOURCE ;
8 Bloc de code
MACRO/OPTIONS
Explication :
Réinitialisation finale des variables système d'erreur avant la dernière démonstration.
Copié !
1** Reset ;
2 
3PROC PRINTTO ;
4 
5RUN ;
6%let sysrc=0 ;
7%let sysfilrc=0 ;
8%let syslibrc=0 ;
9%put Reset: &sysrc &syserr &sysfilrc &syslibrc ;
10**;
11 
9 Bloc de code
MACRO %SYSEXEC
Explication :
Ce bloc tente d'exécuter une commande système inexistante (`zzz`) via `%sysexec`. Les options `xsync` et `noxwait` sont activées pour s'assurer que SAS attend la fin de l'exécution de la commande système et que les erreurs sont correctement propagées. Ensuite, les variables système d'erreur sont affichées pour montrer la détection de l'erreur de commande externe.
Copié !
1options xsync noxwait ;
2%sysexec zzz ;
3options xsync xwait ;
4options nosource ; %put ; %put ===> Detect an error in a system command ; %put ===> You need XSYNC otherwise it does not work ; %put ;
5%put sysrc = &sysrc ;
6%put syserr = &syserr ;
7%put sysfilrc = &sysfilrc ;
8%put syslibrc = &syslibrc ;
9%put ; %put ; options SOURCE ;
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.
Banner
Le Conseil de l'Expert
Expert
Simon
Expert SAS et fondateur.
« Au sein d'une étape DATA, l'utilisation de la fonction LIBNAME() est souvent préférable à l'instruction globale. Elle permet non seulement de récupérer un code retour numérique dans une variable, mais aussi de capturer le message d'erreur textuel exact via la fonction SYSMSG(), facilitant ainsi la création de logs d'erreurs personnalisés et explicites. »