Publicado el :
Macro SASHELP

Macro Maxlengths - Cálculo de longitudes de cadenas

Este código también está disponible en: Deutsch English Français
En espera de validación
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!
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!
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!
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.