Esta macro consulta primero el diccionario de columnas para identificar las variables de tipo carácter especificadas en los parámetros. Luego genera dinámicamente un procedimiento SQL para calcular la función `max(length())` en estas variables. Finalmente, almacena estas longitudes máximas en variables macro globales prefijadas con 'max' (ej: &maxNomVariable), lo cual es útil para redimensionar columnas u optimizar el almacenamiento.
Análisis de datos
Type : SASHELP
Por defecto, la macro apunta a SASHELP.CLASS, pero está diseñada para aceptar cualquier biblioteca y tabla a través de los parámetros `libin` y `datain`.
1 Bloque de código
PROC SQL
Explicación : Recuperación de metadatos: selecciona los nombres de las variables de tipo 'char' presentes en la tabla de destino y que corresponden a la lista proporcionada en el parámetro `vars`.
¡Copiado!
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 Bloque de código
PROC SQL Data
Explicación : Generación dinámica y ejecución de una consulta SQL que calcula la longitud máxima (`max(length(...))`) para cada variable identificada. Los resultados se almacenan en una tabla temporal `maxlengths`.
¡Copiado!
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 Bloque de código
DATA STEP
Explicación : Lectura de la tabla `maxlengths` y creación de macrovariables globales (a través de `CALL SYMPUT`) que contienen los valores calculados, haciendo que esta información esté disponible para el resto del programa SAS.
¡Copiado!
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;
Este material se proporciona "tal cual" por We Are Cas. No hay garantías, expresas o implícitas, en cuanto a la comerciabilidad o idoneidad para un propósito particular con respecto a los materiales o el código contenidos en este documento. We Are Cas no es responsable de los errores en este material tal como existe ahora o existirá, ni We Are Cas proporciona soporte técnico para el mismo.
Información de copyright : Copyright 2016 Nada Wasi, Ann Rodgers, Kristin McCue. Distributed under GNU General Public License.
SAS y todos los demás nombres de productos o servicios de SAS Institute Inc. son marcas registradas o marcas comerciales de SAS Institute Inc. en los EE. UU. y otros países. ® indica registro en los EE. UU. WeAreCAS es un sitio comunitario independiente y no está afiliado a SAS Institute Inc.
Este sitio utiliza cookies técnicas y analíticas para mejorar su experiencia.
Saber más.