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!
%macro mf_getvarlist(libds
,dlm=%str( )
,quote=no
,typefilter=A
)/*/STORE SOURCE*/;
/* declare local vars */
%local outvar dsid nvars x rc dlm q var vtype;
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!
/* credit Rowland Hale - byte34 is double quote, 39 is single quote */
%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));
%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));
1
/* credit Rowland Hale - byte34 is double quote, 39 is single quote */
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!
/* open dataset in macro */
%let dsid=%sysfunc(open(&libds));
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.
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!
%else %do;
%put &sysmacroname: Unable to open &libds (rc=&dsid);
%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());
%let rc=%sysfunc(close(&dsid));
%end;
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!
%do;%unquote(&outvar)%end;
%mend mf_getvarlist;
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'.
SAS und alle anderen Produkt- oder Dienstleistungsnamen von SAS Institute Inc. sind eingetragene Marken oder Marken von SAS Institute Inc. in den USA und anderen Ländern. ® zeigt die Registrierung in den USA an. WeAreCAS ist eine unabhängige Community-Site und nicht mit SAS Institute Inc. verbunden.
Diese Website verwendet technische und analytische Cookies, um Ihre Erfahrung zu verbessern.
Mehr erfahren.