Veröffentlicht am :
Macro SASHELP

Macro Maxlengths - Berechnung der Zeichenkettenlängen

Dieser Code ist auch verfügbar auf: English Español Français
Wartet auf Validierung
Dieses Makro fragt zunächst das Spaltenwörterbuch ab, um die in den Parametern angegebenen Zeichenvariablen zu identifizieren. Anschließend generiert es dynamisch eine SQL-Prozedur, um die Funktion `max(length())` für diese Variablen zu berechnen. Schließlich speichert es diese maximalen Längen in globalen Makrovariablen, die mit 'max' präfixiert sind (z.B. &maxNomVariable), was nützlich ist, um Spaltengrößen anzupassen oder die Speicherung zu optimieren.
Datenanalyse

Type : SASHELP


Standardmäßig verweist das Makro auf SASHELP.CLASS, ist aber so konzipiert, dass es jede beliebige Bibliothek und Tabelle über die Parameter `libin` und `datain` akzeptiert.

1 Codeblock
PROC SQL
Erklärung :
Metadatenabruf: Wählt die Namen der 'char'-Variablen in der Zieltabelle aus, die der im Parameter `vars` angegebenen Liste entsprechen.
Kopiert!
1 PROC SQL noprint;
2 select name into :charvar1 - :charvar9999
3 from dictionary.columns
4 where LIBNAME=upcase("&LIBIN")
5 and memname=upcase("&DATAIN")
6 and type='char'
7 and findw(UPPER("&vars."), STRIP(UPPER(name))) ne 0
8 ;
9 QUIT;
10 %let numvars=&SQLOBS;
2 Codeblock
PROC SQL Data
Erklärung :
Dynamische Generierung und Ausführung einer SQL-Abfrage, die die maximale Länge (`max(length(...))`) für jede identifizierte Variable berechnet. Die Ergebnisse werden in einer temporären Tabelle `maxlengths` gespeichert.
Kopiert!
1 PROC SQL noprint;
2 create TABLE maxlengths as
3 select
4 max(LENGTH(&CHARVAR1)) as max&CHARVAR1
5 %IF &NUMVARS > 1 %THEN %DO;
6 %DO i=2 %to &NUMVARS;
7 , max(LENGTH(&&CHARVAR&i)) as max&&CHARVAR&i
8 %END;
9 %END;
10 from &LIBIN..&DATAIN
11 ;
12 QUIT;
3 Codeblock
DATA STEP
Erklärung :
Lesen der Tabelle `maxlengths` und Erstellung globaler Makrovariablen (über `CALL SYMPUT`), die die berechneten Werte enthalten, wodurch diese Informationen für den Rest des SAS-Programms verfügbar gemacht werden.
Kopiert!
1 DATA _NULL_;
2 SET maxlengths;
3 %DO i=1 %to &NUMVARS;
4 %global max&&CHARVAR&i;
5 call symput("max&&CHARVAR&i",max&&CHARVAR&i);
6 %END;
7 RUN;
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 : Copyright 2016 Nada Wasi, Ann Rodgers, Kristin McCue. Distributed under GNU General Public License.