Publié le :
Macro MIXTE

Extraction de Valeurs Distinctes Formatées

Ce code est également disponible en : Deutsch English Español
En attente de validation
La macro `%mp_distinctfmtvalues` est conçue pour créer un nouveau jeu de données contenant uniquement les valeurs distinctes et formatées d'une variable désignée issue d'un jeu de données source. Elle utilise les fonctions SAS© pour déterminer le format et le type de la variable afin d'appliquer le formatage approprié. Si aucun format n'est spécifié pour une variable numérique, un format numérique par défaut de 32 caractères est appliqué. Le processus s'effectue via une PROC SQL avec l'instruction `SELECT DISTINCT` pour assurer l'unicité des valeurs.
Analyse des données

Type : MIXTE


Le jeu de données source est fourni via le paramètre `libds`. Il peut s'agir d'un jeu de données SASHELP standard, ou de tout autre jeu de données existant dans l'environnement SAS. La macro ne génère pas de données internes (via DATALINES/CARDS) mais opère sur des données préexistantes.

1 Bloc de code
MACRO Data
Explication :
Ce bloc définit la macro `%mp_distinctfmtvalues`. Elle initialise des variables locales pour stocker le format (`fmt`) et le type (`vtype`) de la variable d'entrée, en utilisant des macros externes `%mf_getvarformat` et `%mf_getvartype`. Ensuite, une `PROC SQL` est utilisée pour créer un nouveau jeu de données (`&outds`). L'instruction `SELECT DISTINCT` garantit que seules les valeurs uniques sont retenues. La logique conditionnelle avec `%IF/%ELSE` applique le format approprié à la variable (`&var`) : si c'est un caractère sans format, la variable est sélectionnée directement ; si c'est un caractère avec format, ou un numérique avec format, la fonction `PUT` applique le format. Pour les numériques sans format, `PUT(&var,32.)` est utilisé comme format par défaut. La variable de sortie est nommée `&outvar` et sa longueur est définie par `&varlen`.
Copié !
1%macro mp_distinctfmtvalues(
2 libds=
3 ,var=
4 ,outvar=formatted_value
5 ,outds=work.mp_distinctfmtvalues
6 ,varlen=2000
7)/*/STORE SOURCE*/;
8 
9 %local fmt vtype;
10 %let fmt=%mf_getvarformat(&libds,&var);
11 %let vtype=%mf_getvartype(&libds,&var);
12 
13 PROC SQL;
14 create TABLE &outds as
15 select distinct
16 %IF &vtype=C & %trim(&fmt)=%str() %THEN %DO;
17 &var
18 %END;
19 %ELSE %IF &vtype=C %THEN %DO;
20 put(&var,&fmt)
21 %END;
22 %ELSE %IF %trim(&fmt)=%str() %THEN %DO;
23 put(&var,32.)
24 %END;
25 %ELSE %DO;
26 put(&var,&fmt)
27 %END;
28 as &outvar LENGTH=&varlen
29 from &libds;
30%mend mp_distinctfmtvalues;
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 : Code de base : Allan Bowe (mentionné dans les commentaires d'aide). D'autres macros référencées (_version.sas) ont un copyright de Rodney Sparapani (2001-2006) sous licence GNU GPL et Print_Macro_Parameters.sas a un copyright © 2022, SAS Institute Inc., sous licence Apache-2.0.