Veröffentlicht am :
Dienstprogramm SASHELP | EXTERNE

Liste der Variablen eines Datensatzes

Dieser Code ist auch verfügbar auf: English Español Français Deutsch
Das Makro `%mf_getvarlist` dient dazu, die Variablennamen eines angegebenen SAS©-Datensatzes zu extrahieren und in einer anpassbaren Form darzustellen. Es akzeptiert einen Datensatznamen (`libds`) und ermöglicht die Definition eines `dlm` (Trennzeichen) zur Trennung der Variablen, eine `quote`-Option, um Variablennamen mit Anführungszeichen (einfachen oder doppelten) zu umschließen, und einen `typefilter`, um nur Variablen vom Typ 'Numerisch' ('N'), 'Zeichen' ('C') oder 'Alle' ('A') einzuschließen. Die interne Logik verwendet die Makrofunktionen `SYSFUNC` (`open`, `attrn`, `vartype`, `varname`, `close`), um auf die Metadaten des Datensatzes zuzugreifen. Bei einem Fehler beim Öffnen des Datensatzes werden informative Meldungen in das SAS©-Log geschrieben. Die Ausgabe ist eine Zeichenfolge, die die Liste der Variablen enthält.
Datenanalyse

Type : SASHELP | EXTERNE


Das Makro erstellt keine Daten. Es liest die Metadaten eines vorhandenen SAS-Datensatzes, dessen Name als Parameter (`libds`) übergeben wird. Dieser Datensatz kann eine interne Tabelle (wie `sashelp.class` in den Beispielen) oder ein anderer zugänglicher Benutzerdatensatz sein. Das Makro greift nicht direkt auf externe Datenquellen zu, sondern arbeitet mit bereits geladenen oder über SAS zugänglichen Datensätzen.

1 Codeblock
DÉFINITION MACRO
Erklärung :
Deklaration des Makros `%mf_getvarlist` mit seinen Eingabeparametern für den Datensatz, das Trennzeichen, die Anführungszeichenoptionen und den Typfilter. Die vom Makro verwendeten lokalen Variablen werden hier ebenfalls definiert, um Interferenzen mit anderen globalen Makrovariablen zu vermeiden.
Kopiert!
1%macro mf_getvarlist(libds
2 ,dlm=%str( )
3 ,quote=no
4 ,typefilter=A
5)/*/STORE SOURCE*/;
6 /* declare local vars */
7 %local outvar dsid nvars x rc dlm q var vtype;
2 Codeblock
LOGIQUE MACRO (FORMATAGE GUILLEMETS)
Erklärung :
Dieser Bedingungsblock bestimmt den Wert der Makrovariablen `q`, die das Anführungszeichen darstellt. Wenn der Parameter `quote` 'DOUBLE' ist, nimmt `q` den Wert des doppelten Anführungszeichens (ASCII 34) an. Wenn 'SINGLE', nimmt es den Wert des einfachen Anführungszeichens (ASCII 39) an. In anderen Fällen bleibt `q` leer.
Kopiert!
1/* credit Rowland Hale - byte34 is double quote, 39 is single quote */
2%IF %upcase("e)=DOUBLE %THEN %let q=%qsysfunc(byte(34));
3%ELSE %IF %upcase("e)=SINGLE %THEN %let q=%qsysfunc(byte(39));
4 
3 Codeblock
LOGIQUE MACRO (OUVERTURE DATASET)
Erklärung :
Der durch den Parameter `libds` angegebene Datensatz wird im Lesemodus geöffnet. Die Funktion `%sysfunc(open(...))` gibt eine Datensatz-ID (`dsid`) zurück, wenn das Öffnen erfolgreich ist, oder 0 im Fehlerfall.
Kopiert!
1/* open dataset in macro */
2%let dsid=%sysfunc(open(&libds));
3 
4 Codeblock
LOGIQUE MACRO (TRAITEMENT DES VARIABLES)
Erklärung :
Wenn der Datensatz erfolgreich geöffnet wurde, ruft dieser Block die Anzahl der Variablen (`nvars`) ab. Eine Schleife iteriert von 1 bis `nvars`. Für jede Variable wird ihr Typ (`vtype`) mit `typefilter` verglichen. Wenn die Variable übereinstimmt, wird ihr Name (`varname`) abgerufen und möglicherweise von `q` umschlossen. Wenn der Variablenname leer ist, wird eine Warnung ausgegeben. Der Variablenname wird dann zu `outvar` hinzugefügt, getrennt durch `dlm`. Schließlich wird der Datensatz geschlossen.
Kopiert!
1 %IF &dsid %THEN %DO;
2 %let nvars=%sysfunc(attrn(&dsid,NVARS));
3 %IF &nvars>0 %THEN %DO;
4 /* add variables with supplied delimeter */
5 %DO x=1 %to &nvars;
6 /* get variable type */
7 %let vtype=%sysfunc(vartype(&dsid,&x));
8 %IF &vtype=&typefilter or &typefilter=A %THEN %DO;
9 %let var=&q.%sysfunc(varname(&dsid,&x))&q.;
10 %IF &var=&q&q %THEN %DO;
11 %put &sysmacroname: Empty column found in &libds!;
12 %let var=&q. &q.;
13 %END;
14 %IF %quote(&outvar)=%quote() %THEN %let outvar=&var;
15 %ELSE %let outvar=&outvar.&dlm.&var.;
16 %END;
17 %END;
18 %END;
19 %let rc=%sysfunc(close(&dsid));
20 %END;
5 Codeblock
GESTION DES ERREURS MACRO
Erklärung :
Wenn das Öffnen des Datensatzes fehlschlägt, wird dieser Block ausgeführt. Er zeigt klare Fehlermeldungen im SAS-Log an, einschließlich des Makronamens, des betreffenden Datensatzes, des Rückgabecodes des Öffnungsvorgangs und der detaillierten Systemmeldung, um die Diagnose zu erleichtern. Der Datensatz wird dann geschlossen, um Ressourcen freizugeben, selbst im Falle eines anfänglichen Öffnungsfehlers.
Kopiert!
1 %ELSE %DO;
2 %put &sysmacroname: Unable to open &libds (rc=&dsid);
3 %put &sysmacroname: SYSMSG= %sysfunc(sysmsg());
4 %let rc=%sysfunc(close(&dsid));
5 %END;
6 Codeblock
RETOUR MACRO
Erklärung :
Dieser letzte Block ist für den Rückgabewert des Makros verantwortlich. Er verwendet `%unquote(&outvar)`, um sicherzustellen, dass die Zeichenfolge `outvar`, die die formatierte Variablenliste enthält, unverändert zurückgegeben wird, ohne unerwünschte Interpretation spezieller Zeichen durch den Makroprozessor. Das Makro wird dann mit `%mend` beendet.
Kopiert!
1 %DO;%unquote(&outvar)%END;
2%mend mf_getvarlist;
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 in den zugehörigen Kommentaren: Allan Bowe. Die referenzierte Datei _version.sas gibt an: 'Copyright (c) 2001-2006 Rodney Sparapani'.