Archive for the ‘libref’ Category

h1

Une fonction LIBREF au résultat inattendu

mars 23, 2010

La fonction LIBREF vérifie l’existence d’une bibliothèque. Vu que la réponse attentue est oui ou non, on pourrait s’attendre à une résultat binaire avec zéro pour non et un pour oui. Dans les faits, cette fonction retourne zéro pour oui et toute autre valeur signifie non.

Voici un exemple.

1.  Contexte, exemple

Vous cherchez à savoir si le chemin d’accès défini dans un  paramètre de macro peut servir de bibliothèque. Une solution est de tenter de créer la bibliothèque et ensuite de vérifier si la bibliothèque a été créée ou non.

2. Le programme

Dans l’exemple qui suit, une macro TEST est créée. Elle a un paramètre DSNPATH=. Le chemin d’accès donné dans ce paramètre est utilisé pour créé la bibliothèque INLIB.

Ensuite pour les besoins de l’exemple, un message est ajouté dans la log au moyen des instructions %PUT.

  • Tout d’abord, est indiqué dans la log la valeur prise par le paramètre de macro DSNPATH.
  • Puis, la valeur prise par la fonction LIBREF est affiché dans la log.

Afin de pouvoir utiliser cette fonction hors d’une étape data ou d’une procédure PROC SQL, il faut l’englober dans une macro fonction %SYSFUNC().

En fin de macro la référence à la bibliothèque est supprimée.

%macro test(dsnpath=);
libname inlib « &dsnpath. »;
%put MESSAGE: DSNPATH= &dsnpath.;
%put MESSAGE: Voir le résultat de la fonction LIBREF dans la log: %sysfunc(libref(inlib));
libname inlib;
%mend test;

Le premier appel de macro se fait avec un chemin d’accès valid. Tandis que le second appel de macro utilise un chemin d’accès erroné.

%test (dsnpath=C:/sasref);
%test (dsnpath=C:/sasre);

3. La log

Lorsque le chemin d’accès est correct, la fonction LIBREF retourne la valeur 0.

Quand le chemin d’accès n’est pas correct, la fonction LIBREF retourne une valeur différente de zéro. Dans l’exemple, il s’agit de la valeur -70008.

Lectures complémentaires

Autres articles sur %SYSFUNC

SAS Online Doc

  • Summary Descriptions and Syntax
  • LIBREF Function