La macro crea y manipula un dataset SAS interno (por defecto 'work.mp_setkeyvalue') o un dataset especificado por el usuario. No lee datos de fuentes externas (archivos, bases de datos externas) ni de datasets SASHELP, con la excepción potencial de la macro `%mf_existds` que podría consultar metadatos del sistema sobre datasets SAS, pero el objetivo principal es la gestión de un dataset definido por el usuario o la macro.
1 Bloque de código
DATA STEP Data
Explicación : Este bloque de código condicional verifica la existencia del dataset objetivo `&libds` utilizando la macro `%mf_existds`. Si no existe, se ejecuta un paso DATA para crear el dataset. El dataset `&libds` se define con atributos específicos: una columna `key` de 64 caracteres con un índice único para búsquedas rápidas, `valc` de 2048 caracteres para valores textuales, `valn` de 8 bytes para valores numéricos, y `type` de 1 carácter para indicar el formato del valor almacenado. `CALL MISSING(OF _ALL_)` inicializa todas las variables a valores faltantes, y `STOP` evita que el paso DATA lea observaciones, creando así un dataset vacío con la estructura definida.
¡Copiado!
%if not (%mf_existds(&libds)) %then %do;
data &libds (index=(key/unique));
length key $64 valc $2048 valn 8 type $1;
call missing(of _all_);
stop;
run;
%end;
1
%IF not (%mf_existds(&libds)) %THEN %DO;
2
DATA &libds (index=(key/unique));
3
LENGTH key $64 valc $2048 valn 8 type $1;
4
call missing(of _all_);
5
stop;
6
RUN;
7
%END;
2 Bloque de código
PROC SQL
Explicación : Este bloque utiliza `PROC SQL` para insertar o actualizar el par clave-valor en el dataset `&libds`. Primero, se ejecuta una instrucción `DELETE` para eliminar cualquier fila existente que corresponda a la `key` proporcionada, asegurando así que solo exista una entrada para cada clave. Luego, se utiliza una instrucción `INSERT` para agregar el nuevo par clave-valor. El valor se almacena en la columna `valc` si el parámetro `type` es 'C' (carácter), o en `valn` si `type` es 'N' (numérico), utilizando respectivamente `%SYMGET` o `%SYMGETN` para recuperar los valores de las variables macro. La columna `type` también se actualiza en consecuencia. `QUIT;` termina el procedimiento SQL.
¡Copiado!
proc sql;
delete from &libds
where key=symget('key');
insert into &libds
set key=symget('key')
%if &type=C %then %do;
,valc=symget('value')
,type='C'
%end;
%else %do;
,valn=symgetn('value')
,type='N'
%end;
;
quit;
1
PROC SQL;
2
delete from &libds
3
where key=symget('key');
4
insert into &libds
5
SET key=symget('key')
6
%IF &type=C %THEN %DO;
7
,valc=symget('value')
8
,type='C'
9
%END;
10
%ELSE %DO;
11
,valn=symgetn('value')
12
,type='N'
13
%END;
14
;
15
16
QUIT;
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.
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.