Publié le :
Macro CREATION_INTERNE

Gestionnaire de Clés-Valeurs dans un Dataset

Ce code est également disponible en : Deutsch English Español
En attente de validation
La macro `%mp_setkeyvalue` est un outil flexible pour maintenir des informations structurées sous forme de paires clé-valeur dans un dataset SAS©. Si le dataset cible (`libds=`) n'existe pas, elle initialise une nouvelle table avec des colonnes `key` (char $64 avec index unique), `valc` (char $2048 pour les valeurs textuelles), `valn` (num 8 pour les valeurs numériques), et `type` (char $1 pour indiquer le type de valeur stockée). L'utilisation d'un index unique sur la colonne `key` assure l'intégrité des données. Ensuite, elle utilise `PROC SQL` pour d'abord supprimer toute entrée existante pour la `key` donnée, assurant qu'une seule entrée existe pour chaque clé. Puis, elle insère la nouvelle paire clé-valeur. Le paramètre `type` (C pour caractère par défaut, N pour numérique) détermine dans quelle colonne (`valc` ou `valn`) la valeur est stockée. Cette approche est utile pour les tables de configuration, les paramètres dynamiques ou le suivi de processus.
Analyse des données

Type : CREATION_INTERNE


La macro crée et manipule un dataset SAS interne (par défaut 'work.mp_setkeyvalue') ou un dataset spécifié par l'utilisateur. Elle ne lit pas de données depuis des sources externes (fichiers, bases de données externes) ni depuis des datasets SASHELP, à l'exception potentielle de la macro `%mf_existds` qui pourrait interroger des métadonnées système sur des datasets SAS, mais l'objectif principal est la gestion d'un dataset défini par l'utilisateur ou la macro.

1 Bloc de code
DATA STEP Data
Explication :
Ce bloc de code conditionnel vérifie l'existence du dataset cible `&libds` en utilisant la macro `%mf_existds`. S'il n'existe pas, un pas DATA est exécuté pour créer le dataset. Le dataset `&libds` est défini avec des attributs spécifiques : une colonne `key` de 64 caractères avec un index unique pour des recherches rapides, `valc` de 2048 caractères pour les valeurs textuelles, `valn` de 8 octets pour les valeurs numériques, et `type` d'1 caractère pour indiquer le format de la valeur stockée. `CALL MISSING(OF _ALL_)` initialise toutes les variables à des valeurs manquantes, et `STOP` empêche le pas DATA de lire des observations, créant ainsi un dataset vide avec la structure définie.
Copié !
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 Bloc de code
PROC SQL
Explication :
Ce bloc utilise `PROC SQL` pour insérer ou mettre à jour la paire clé-valeur dans le dataset `&libds`. Premièrement, une instruction `DELETE` est exécutée pour retirer toute ligne existante correspondant à la `key` fournie, assurant ainsi qu'une seule entrée pour chaque clé existe. Ensuite, une instruction `INSERT` est utilisée pour ajouter la nouvelle paire clé-valeur. La valeur est stockée dans la colonne `valc` si le paramètre `type` est 'C' (caractère), ou dans `valn` si `type` est 'N' (numérique), en utilisant respectivement `%SYMGET` ou `%SYMGETN` pour récupérer les valeurs des variables macro. La colonne `type` est également mise à jour en conséquence. `QUIT;` termine la procédure SQL.
Copié !
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;
Ce matériel est fourni "tel quel" par We Are Cas. Il n'y a aucune garantie, expresse ou implicite, quant à la qualité marchande ou à l'adéquation à un usage particulier concernant le matériel ou le code contenu dans les présentes. We Are Cas n'est pas responsable des erreurs dans ce matériel tel qu'il existe maintenant ou existera, et We Are Cas ne fournit pas de support technique pour celui-ci.
Informations de Copyright : Copyright (c) 2001-2006 Rodney Sparapani (pour _version.sas, sous GNU General Public License); Copyright 2010-2023 HMS Analytical Software GmbH (pour macro_without_brief_tag.sas, part of SASUnit, sous GNU Lesser General Public License); Copyright © 2022, SAS Institute Inc. (pour print_macro_parameters.sas, sous SPDX-License-Identifier: Apache-2.0); Copyright (c) 2004 Rodney Sparapani (pour _file.json, sous GNU General Public License); Copyright 2017, Rho, Inc. All rights reserved. (pour list2items.json).