Macro list2format

Ce code est également disponible en : Deutsch English Español
Niveau de difficulté
Débutant
Publié le :
Cette macro SAS©, nommée `list2format`, génère dynamiquement un format numérique SAS©. Elle accepte deux paramètres : `fmtname` pour spécifier le nom du format à créer, et `list` pour une chaîne de caractères contenant une liste de valeurs séparées par des virgules et idéalement encadrées de parenthèses (ex: `(ALT,BILI,CREAT)`). La macro analyse cette liste, extrait chaque élément et l'associe séquentiellement à un nombre entier dans la définition du format via `PROC FORMAT`. Chaque élément de la liste est nettoyé des espaces superflus à l'aide de `%sysfunc(strip())` avant d'être intégré dans le format. C'est un outil pratique pour convertir une liste de chaînes en un format numérique exploitable pour des variables catégorielles.
Analyse des données

Type : CREATION_INTERNE


Les données utilisées pour la création du format proviennent d'une liste de valeurs passée en paramètre à la macro et traitée en interne, sans dépendance externe ou de données SASHELP.

1 Bloc de code
MACRO / PROC FORMAT Data
Explication :
Ce bloc définit la macro `list2format`. Il initialise les variables locales `i` (compteur) et `item` pour itérer sur la liste de valeurs fournie dans le paramètre `&list`. La fonction `%qscan` est utilisée avec `%nrbquote` pour extraire chaque élément de la liste, en tenant compte des délimiteurs spécifiés (virgule et parenthèses). Chaque élément extrait est stocké dans une variable macro dynamique (`list_&i`). Une fois la liste entièrement parcourue, `list_n` contient le nombre total d'éléments. Ensuite, un bloc `PROC FORMAT` est généré. Une boucle `%do` est utilisée pour créer les associations nombre=valeur dans la définition du format. Pour chaque itération, le nombre (`&i`) est associé à la valeur de la liste correspondante (référencée par `&&list_&i`) après avoir été nettoyée des espaces avec `%sysfunc(strip())`. Le `run;` final exécute la procédure de formatage.
Copié !
1/*--------------------------------------------------------------------------------------*
2 Copyright 2017, Rho, Inc. All rights reserved.
3 
4 PROGRAM: list2format
5 
6 PURPOSE: Create a numeric format based on a list of values.
7 
8 INPUT: fmtname= format name
9 list= list of values
10 
11 DETAILS:
12 - list should be specified as comma-separated values enclosed in parentheses.
13 e.g., list=(ALT,BILI,CREAT).
14
15 PROGRAM HISTORY:
16 DATE PROGRAMMER DESCRIPTION
17 --------- --------------- ------------------------------------------------------
18 2017-12-15 Shane Rosanbalm Create.
19 
20*--------------------------------------------------------------------------------------*/
21 
22%macro list2format
23 (fmtname=
24 ,list=
25 );
26 
27 %*--- get first item ---;
28 %local i item;
29 %let i = 1;
30 %let item = %qscan(%nrbquote(&list),&i,%str((),));
31
32 %*--- continue IF more items ---;
33 %DO %while(&item ne );
34 %local list_&i;
35 %let list_&i = &item;
36 %let i = %eval(&i+1);
37 %let item = %qscan(%nrbquote(&list),&i,%str((),));
38 %END;
39
40 %*--- number of items found ---;
41 %local list_n;
42 %let list_n = %eval(&i-1);
43
44 %*--- make a FORMAT ---;
45 PROC FORMAT;
46 value &fmtname
47 %DO i = 1 %to &list_n;
48 &i = "%sysfunc(strip(&&list_&i))"
49 %END;
50 ;
51 RUN;
52 
53%mend list2format;
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 2017, Rho, Inc. All rights reserved.