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!
proc sql noprint;
select name into :charvar1 - :charvar9999
from dictionary.columns
where libname=upcase("&LIBIN")
and memname=upcase("&DATAIN")
and type='char'
and findw(UPPER("&vars."), STRIP(UPPER(name))) ne 0
;
quit;
%let numvars=&SQLOBS;
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!
proc sql noprint;
create table maxlengths as
select
max(length(&CHARVAR1)) as max&CHARVAR1
%if &NUMVARS > 1 %then %do;
%do i=2 %to &NUMVARS;
, max(length(&&CHARVAR&i)) as max&&CHARVAR&i
%end;
%end;
from &LIBIN..&DATAIN
;
quit;
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!
data _NULL_;
set maxlengths;
%do i=1 %to &NUMVARS;
%global max&&CHARVAR&i;
call symput("max&&CHARVAR&i",max&&CHARVAR&i);
%end;
run;
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.
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.