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é !
/*--------------------------------------------------------------------------------------*
Copyright 2017, Rho, Inc. All rights reserved.
PROGRAM: list2format
PURPOSE: Create a numeric format based on a list of values.
INPUT: fmtname= format name
list= list of values
DETAILS:
- list should be specified as comma-separated values enclosed in parentheses.
e.g., list=(ALT,BILI,CREAT).
PROGRAM HISTORY:
DATE PROGRAMMER DESCRIPTION
--------- --------------- ------------------------------------------------------
2017-12-15 Shane Rosanbalm Create.
*--------------------------------------------------------------------------------------*/
%macro list2format
(fmtname=
,list=
);
%*--- get first item ---;
%local i item;
%let i = 1;
%let item = %qscan(%nrbquote(&list),&i,%str((),));
%*--- continue if more items ---;
%do %while(&item ne );
%local list_&i;
%let list_&i = &item;
%let i = %eval(&i+1);
%let item = %qscan(%nrbquote(&list),&i,%str((),));
%end;
%*--- number of items found ---;
%local list_n;
%let list_n = %eval(&i-1);
%*--- make a format ---;
proc format;
value &fmtname
%do i = 1 %to &list_n;
&i = "%sysfunc(strip(&&list_&i))"
%end;
;
run;
%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.
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.