Publié le :
Utilitaire CREATION_INTERNE

Générer un libref SAS unique

Ce code est également disponible en : Deutsch English Español Français
La macro `%mf_getuniquelibref` recherche un libref SAS© non utilisé en itérant des suffixes numériques (commençant par 0) ajoutés à un `prefix` spécifié (par défaut 'mc'). Elle valide la longueur du préfixe (maximum 7 caractères) et sa conformité aux règles des noms SAS©. La valeur `maxtries` est ajustée dynamiquement en fonction de la longueur du préfixe pour couvrir toutes les combinaisons possibles (jusqu'à 8 caractères pour un libref). La fonction `SYSFUNC(LIBREF())` est utilisée pour vérifier l'existence de chaque libref potentiel. Le premier libref non attribué est retourné. En cas d'échec (tous les librefs possibles sont pris), des messages d'erreur sont écrits dans le journal SAS© et la macro retourne `0`.
Analyse des données

Type : CREATION_INTERNE


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é !
1%macro mf_getuniquelibref(prefix=mc,maxtries=1000);
2 %local x;
3 
4 %IF ( %LENGTH(&prefix) gt 7 ) %THEN %DO;
5 %put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;
6 0
7 %return;
8 %END;
9 %ELSE %IF (%sysfunc(NVALID(&prefix,v7))=0) %THEN %DO;
10 %put %str(ERR)OR: Invalid prefix (&prefix);
11 0
12 %return;
13 %END;
14 
15 /* 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.