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é !
%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 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é !
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;
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.
SAS et tous les autres noms de produits ou de services de SAS Institute Inc. sont des marques déposées ou des marques de commerce de SAS Institute Inc. aux États-Unis et dans d'autres pays. ® indique un enregistrement aux États-Unis. WeAreCAS est un site communautaire indépendant et n'est pas affilié à SAS Institute Inc.
Ce site utilise des cookies techniques et analytiques pour améliorer votre expérience.
En savoir plus.