Publicado el :
Macro CREATION_INTERNE

Administrador de Claves-Valores en un Dataset

Este código también está disponible en: Deutsch English Français
En espera de validación
La macro `%mp_setkeyvalue` es una herramienta flexible para mantener información estructurada en forma de pares clave-valor en un dataset SAS©. Si el dataset de destino (`libds=`) no existe, inicializa una nueva tabla con columnas `key` (char $64 con índice único), `valc` (char $2048 para valores de texto), `valn` (num 8 para valores numéricos), y `type` (char $1 para indicar el tipo de valor almacenado). El uso de un índice único en la columna `key` garantiza la integridad de los datos. Luego, utiliza `PROC SQL` para primero eliminar cualquier entrada existente para la `key` dada, asegurando que solo exista una entrada para cada clave. Después, inserta el nuevo par clave-valor. El parámetro `type` (C para carácter por defecto, N para numérico) determina en qué columna (`valc` o `valn`) se almacena el valor. Este enfoque es útil para tablas de configuración, parámetros dinámicos o seguimiento de procesos.
Análisis de datos

Type : CREATION_INTERNE


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!
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!
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.
Información de copyright : Copyright (c) 2001-2006 Rodney Sparapani (para _version.sas, bajo GNU General Public License); Copyright 2010-2023 HMS Analytical Software GmbH (para macro_without_brief_tag.sas, parte de SASUnit, bajo GNU Lesser General Public License); Copyright © 2022, SAS Institute Inc. (para print_macro_parameters.sas, bajo SPDX-License-Identifier: Apache-2.0); Copyright (c) 2004 Rodney Sparapani (para _file.json, bajo GNU General Public License); Copyright 2017, Rho, Inc. All rights reserved. (para list2items.json).