Veröffentlicht am :
Dienstprogramm CREATION_INTERNE

Eindeutigen SAS-Libref generieren

Dieser Code ist auch verfügbar auf: English Español Français Deutsch
Das Makro `%mf_getuniquelibref` sucht nach einem unbenutzten SAS©-Libref, indem es numerische Suffixe (beginnend bei 0) zu einem angegebenen `prefix` (standardmäßig 'mc') hinzufügt. Es überprüft die Länge des Präfixes (maximal 7 Zeichen) und seine Konformität mit den SAS©-Namensregeln. Der Wert `maxtries` wird dynamisch an die Länge des Präfixes angepasst, um alle möglichen Kombinationen (bis zu 8 Zeichen für einen Libref) abzudecken. Die Funktion `SYSFUNC(LIBREF())` wird verwendet, um die Existenz jedes potenziellen Librefs zu überprüfen. Der erste nicht zugewiesene Libref wird zurückgegeben. Im Fehlerfall (alle möglichen Librefs sind belegt) werden Fehlermeldungen in das SAS©-Protokoll geschrieben und das Makro gibt `0` zurück.
Datenanalyse

Type : CREATION_INTERNE


Das Makro verbraucht oder erzeugt keine SAS-Datensätze. Es manipuliert Zeichenketten (Libref-Präfixe) und interagiert mit dem SAS-System über Metadatenfunktionen, um einen verfügbaren Libref-Namen zu finden. Es hängt für seine Hauptfunktion nicht von externen oder spezifischen internen Daten (wie SASHELP) ab.

1 Codeblock
Macro
Erklärung :
Dieser Block definiert das Makro `%mf_getuniquelibref`. Es initialisiert eine lokale Variable `x`. Die ersten `%if`-Anweisungen validieren den Parameter `prefix`: Er darf 7 Zeichen nicht überschreiten und muss ein gültiger SAS-Name (`V7`) sein. Die Variable `maxtries` wird dann berechnet, um den Suchbereich zu bestimmen. Eine Schleife (`%do x = 0 %to &maxtries;`) iteriert, um potenzielle Librefs zu generieren (z. B. `mc0`, `mc1`, ...). `%sysfunc(libref(&prefix&x))` überprüft, ob der generierte Libref bereits zugewiesen ist. Wenn `libref()` einen Wert ungleich Null zurückgibt, wird der Libref nicht verwendet und vom Makro zurückgegeben. Wenn die Schleife beendet wird, ohne einen eindeutigen Libref zu finden, werden Fehlermeldungen in das SAS-Protokoll geschrieben und das Makro gibt `0` zurück.
Kopiert!
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;
Dieses Material wird von We Are Cas "wie besehen" zur Verfügung gestellt. Es gibt keine ausdrücklichen oder stillschweigenden Garantien hinsichtlich der Marktgängigkeit oder Eignung für einen bestimmten Zweck in Bezug auf die hierin enthaltenen Materialien oder Codes. We Are Cas ist nicht verantwortlich für Fehler in diesem Material, wie es jetzt existiert oder existieren wird, noch bietet We Are Cas technischen Support dafür an.
Urheberrechtsinformationen : Erwähnt im Hilfeblock: Allan Bowe. Ein detaillierteres Copyright, das in einer verknüpften Datei (`_version.sas`) gefunden wurde, besagt: Copyright (c) 2001-2006 Rodney Sparapani. Diese Datei ist freie Software; Sie können sie unter den Bedingungen der GNU General Public License, wie von der Free Software Foundation veröffentlicht, weiterverteilen und/oder modifizieren.