La macro ne consomme ni ne produit de jeux de données SAS. Elle manipule des chaînes de caractères (préfixes de librefs) et interagit avec le système SAS via des fonctions de métadonnées pour trouver un nom de libref disponible. Elle ne dépend d'aucune donnée externe ou interne spécifique (comme SASHELP) pour son fonctionnement principal.
1 Bloc de code
Macro
Explication : Ce bloc définit la macro `%mf_getuniquelibref`. Elle initialise une variable locale `x`. Les premières instructions `%if` valident le paramètre `prefix` : il ne doit pas dépasser 7 caractères et doit être un nom SAS valide (`V7`). La variable `maxtries` est ensuite calculée pour déterminer la plage de recherche. Une boucle (`%do x = 0 %to &maxtries;`) itère pour générer des librefs potentiels (par exemple, `mc0`, `mc1`, ...). `%sysfunc(libref(&prefix&x))` vérifie si le libref généré est déjà attribué. Si `libref()` retourne une valeur non nulle, le libref n'est pas utilisé et est retourné par la macro. Si la boucle se termine sans trouver de libref unique, des messages d'erreur sont écrits dans le journal SAS et la macro retourne `0`.
Copié !
%macro mf_getuniquelibref(prefix=mc,maxtries=1000);
%local x;
%if ( %length(&prefix) gt 7 ) %then %do;
%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;
0
%return;
%end;
%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;
%put %str(ERR)OR: Invalid prefix (&prefix);
0
%return;
%end;
/* Set maxtries equal to '10 to the power of [# unused characters] - 1' */
%let maxtries=%eval(10**(8-%length(&prefix))-1);
%do x = 0 %to &maxtries;
%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;
&prefix&x
%return;
%end;
%let x = %eval(&x + 1);
%end;
%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;
%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;
0
%mend mf_getuniquelibref;
/* Set maxtries equal to '10 to the power of [# unused characters] - 1' */
16
%let maxtries=%eval(10**(8-%LENGTH(&prefix))-1);
17
18
%DO x = 0 %to &maxtries;
19
%IF %sysfunc(libref(&prefix&x)) ne 0 %THEN %DO;
20
&prefix&x
21
%return;
22
%END;
23
%let x = %eval(&x + 1);
24
%END;
25
26
%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;
27
%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;
28
0
29
%mend mf_getuniquelibref;
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 : Mentionné dans le bloc d'aide : Allan Bowe. Un copyright plus détaillé trouvé dans un fichier lié (`_version.sas`) indique : Copyright (c) 2001-2006 Rodney Sparapani. Ce fichier est un logiciel libre ; vous pouvez le redistribuer et/ou le modifier selon les termes de la Licence Publique Générale GNU telle que publiée par la Free Software Foundation.
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.