Publicado el :
Macro MIXTE

Extracción de Valores Distintos Formateados

Este código también está disponible en: Deutsch English Français
En espera de validación
La macro `%mp_distinctfmtvalues` está diseñada para crear un nuevo conjunto de datos que contiene únicamente los valores distintos y formateados de una variable designada de un conjunto de datos de origen. Utiliza las funciones SAS© para determinar el formato y el tipo de la variable con el fin de aplicar el formato adecuado. Si no se especifica ningún formato para una variable numérica, se aplica un formato numérico predeterminado de 32 caracteres. El proceso se realiza a través de una PROC SQL con la instrucción `SELECT DISTINCT` para asegurar la unicidad de los valores.
Análisis de datos

Type : MIXTE


El conjunto de datos de origen se proporciona a través del parámetro `libds`. Puede ser un conjunto de datos SASHELP estándar, o cualquier otro conjunto de datos existente en el entorno SAS. La macro no genera datos internos (a través de DATALINES/CARDS) sino que opera sobre datos preexistentes.

1 Bloque de código
MACRO Data
Explicación :
Este bloque define la macro `%mp_distinctfmtvalues`. Inicializa variables locales para almacenar el formato (`fmt`) y el tipo (`vtype`) de la variable de entrada, utilizando las macros externas `%mf_getvarformat` y `%mf_getvartype`. Luego, se utiliza una `PROC SQL` para crear un nuevo conjunto de datos (`&outds`). La instrucción `SELECT DISTINCT` garantiza que solo se retengan los valores únicos. La lógica condicional con `%IF/%ELSE` aplica el formato apropiado a la variable (`&var`): si es un carácter sin formato, la variable se selecciona directamente; si es un carácter con formato, o un numérico con formato, la función `PUT` aplica el formato. Para los numéricos sin formato, `PUT(&var,32.)` se utiliza como formato predeterminado. La variable de salida se denomina `&outvar` y su longitud se define por `&varlen`.
¡Copiado!
1%macro mp_distinctfmtvalues(
2 libds=
3 ,var=
4 ,outvar=formatted_value
5 ,outds=work.mp_distinctfmtvalues
6 ,varlen=2000
7)/*/STORE SOURCE*/;
8 
9 %local fmt vtype;
10 %let fmt=%mf_getvarformat(&libds,&var);
11 %let vtype=%mf_getvartype(&libds,&var);
12 
13 PROC SQL;
14 create TABLE &outds as
15 select distinct
16 %IF &vtype=C & %trim(&fmt)=%str() %THEN %DO;
17 &var
18 %END;
19 %ELSE %IF &vtype=C %THEN %DO;
20 put(&var,&fmt)
21 %END;
22 %ELSE %IF %trim(&fmt)=%str() %THEN %DO;
23 put(&var,32.)
24 %END;
25 %ELSE %DO;
26 put(&var,&fmt)
27 %END;
28 as &outvar LENGTH=&varlen
29 from &libds;
30%mend mp_distinctfmtvalues;
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 : Código base: Allan Bowe (mencionado en los comentarios de ayuda). Otras macros referenciadas (_version.sas) tienen un copyright de Rodney Sparapani (2001-2006) bajo licencia GNU GPL y Print_Macro_Parameters.sas tiene un copyright © 2022, SAS Institute Inc., bajo licencia Apache-2.0.