Cardinalité limitée de la variable SepalLength

ATTENTION : Ce contenu est DÉSACTIVÉ. Il est invisible pour les visiteurs.
Niveau de difficulté
Débutant
Publié le :
La procédure CARDINALITY calcule le nombre de niveaux distincts (cardinalité) pour les variables spécifiées dans une table de données CAS. Elle peut générer une table de sortie récapitulative (outcard) et une table de détails (outdetails) contenant les niveaux individuels. L'option MAXLEVELS permet de limiter le nombre de niveaux pour lesquels des informations détaillées sont stockées dans outdetails. Si une variable a plus de niveaux que la valeur spécifiée par MAXLEVELS, les niveaux excédentaires sont combinés en un seul 'autre' niveau dans outdetails, et la colonne _MORE_ dans outcard indique 'Y'. Cet exemple illustre comment la procédure gère une variable numérique ('SepalLength') avec un nombre limité de niveaux distincts, et comment la visualisation peut être affectée par le paramètre MAXLEVELS. L'exemple inclut des cas d'utilisation basiques, intermédiaires, avancés avec des formats, et une exécution optimisée dans l'environnement CAS.
Analyse des données

Type : CREATION_INTERNE


Les exemples utilisent des données générées (datalines) ou le jeu de données intégré SASHELP.IRIS.

1 Bloc de code
PROC CARDINALITY
Explication :
Cet exemple illustre l'utilisation la plus simple de la procédure CARDINALITY. Il charge le jeu de données 'iris' de SASHELP dans une bibliothèque CAS nommée 'mylib'. Ensuite, il exécute `PROC CARDINALITY` pour calculer la cardinalité de toutes les variables, en générant les tables de sortie `outcard` et `outdetails`. `PROC PRINT` est utilisé pour afficher un résumé de la cardinalité de chaque variable.
Copié !
1/* Création d'une session CAS et chargement des données SASHELP.IRIS */
2options cas nox; /* nox est une option SAS, remplacez-la par l'option CAS appropriée si vous utilisez une interface interactive */
3cas LIBNAME mylib sessref=casauto; /* Assurez-vous que 'casauto' est votre session CAS active */
4 
5DATA mylib.iris;
6 SET sashelp.iris;
7RUN;
8 
9PROC CARDINALITY DATA=mylib.iris outcard=mylib.card_basic outdetails=mylib.details_basic;
10RUN;
11 
12PROC PRINT DATA=mylib.card_basic;
13 title 'Cardinalité des variables (Basique)';
14 var _varname_ _type_ _cardinality_ _more_ _visible_ _min_ _max_;
15RUN;
16 
17/* Nettoyage */
18PROC CASUTIL incaslib="mylib";
19 drop TABLE "IRIS" "CARD_BASIC" "DETAILS_BASIC";
20QUIT;
21 
2 Bloc de code
PROC CARDINALITY
Explication :
Cet exemple démontre l'utilisation des options `MAXLEVELS` et `ORDER=FREQ`. `MAXLEVELS=5` limite les informations détaillées (dans `outdetails`) aux 5 niveaux les plus fréquents pour chaque variable. `ORDER=FREQ` garantit que ces niveaux sont triés par ordre de fréquence décroissante. La table `outcard` affiche toujours la cardinalité totale, mais la colonne `_MORE_` indique si des niveaux ont été regroupés. La table `outdetails` pour 'SepalLength' ne montrera que les 5 niveaux les plus fréquents, le reste étant regroupé sous un niveau 'Autre'.
Copié !
1/* Création d'une session CAS et chargement des données SASHELP.IRIS */
2options cas nox; /* nox est une option SAS, remplacez-la par l'option CAS appropriée si vous utilisez une interface interactive */
3cas LIBNAME mylib sessref=casauto; /* Assurez-vous que 'casauto' est votre session CAS active */
4 
5DATA mylib.iris;
6 SET sashelp.iris;
7RUN;
8 
9PROC CARDINALITY DATA=mylib.iris outcard=mylib.card_freq outdetails=mylib.details_freq maxlevels=5 order=freq;
10 var SepalLength;
11RUN;
12 
13PROC PRINT DATA=mylib.card_freq;
14 title 'Cardinalité des variables (Options courantes - MAXLEVELS=5, ORDER=FREQ)';
15 var _varname_ _type_ _cardinality_ _more_ _visible_ _min_ _max_;
16RUN;
17 
18PROC PRINT DATA=mylib.details_freq;
19 title 'Détails des niveaux pour SepalLength (MAXLEVELS=5, ORDER=FREQ)';
20 where _varname_ = 'SepalLength';
21RUN;
22 
23/* Nettoyage */
24PROC CASUTIL incaslib="mylib";
25 drop TABLE "IRIS" "CARD_FREQ" "DETAILS_FREQ";
26QUIT;
27 
3 Bloc de code
PROC CARDINALITY Data
Explication :
Cet exemple avancé montre comment gérer les valeurs manquantes et utiliser des formats personnalisés avec `PROC CARDINALITY`. L'option `MISSING` inclut les valeurs manquantes comme un niveau distinct dans le calcul de cardinalité et les tables de sortie. Des formats `agegrpfmt` et `$genrefmt` sont appliqués aux variables 'Age' et 'Genre' respectivement. `MAXLEVELS` est contrôlé par une macro-variable (`max_levels_limit`), démontrant la flexibilité pour l'automatisation. La sortie `outcard` reflète la cardinalité incluant les manquantes et les niveaux formatés, et `outdetails` fournit les détails de ces niveaux.
Copié !
1/* Création d'une session CAS */
2options cas nox; /* nox est une option SAS, remplacez-la par l'option CAS appropriée si vous utilisez une interface interactive */
3cas LIBNAME mylib sessref=casauto; /* Assurez-vous que 'casauto' est votre session CAS active */
4 
5/* Création d'un format personnalisé */
6PROC FORMAT;
7 value $genrefmt 'M'='Masculin' 'F'='Féminin' other='Inconnu';
8 value agegrpfmt low-20='Jeune' 21-50='Adulte' other='Senior';
9RUN;
10 
11/* Création d'un jeu de données avec des valeurs manquantes et une variable catégorielle */
12DATA mylib.personnes;
13 INPUT ID Nom $ Age Genre $;
14 DATALINES;
151 Alice 25 F
162 Bob 30 M
173 Charlie . M
184 Diana 40 F
195 Eve 22 F
206 Frank 55 M
217 Grace 38 F
228 Henry . M
239 Isla 19 F
2410 Jack 60 M
25;
26RUN;
27 
28%let max_levels_limit = 3;
29 
30PROC CARDINALITY DATA=mylib.personnes outcard=mylib.card_adv outdetails=mylib.details_adv
31 maxlevels=&max_levels_limit missing;
32 FORMAT Genre $genrefmt. Age agegrpfmt.;
33RUN;
34 
35PROC PRINT DATA=mylib.card_adv;
36 title 'Cardinalité des variables (Avancé - MISSING, Formats, MAXLEVELS=%str(&max_levels_limit))';
37 var _varname_ _type_ _cardinality_ _more_ _visible_ _min_ _max_;
38RUN;
39 
40PROC PRINT DATA=mylib.details_adv;
41 title 'Détails des niveaux (Avancé - Genre et Age)';
42 where _varname_ in ('Genre', 'Age');
43RUN;
44 
45/* Nettoyage */
46PROC CASUTIL incaslib="mylib";
47 drop TABLE "PERSONNES" "CARD_ADV" "DETAILS_ADV";
48QUIT;
49 
4 Bloc de code
PROC CARDINALITY Data
Explication :
Cet exemple est conçu pour l'environnement SAS Viya avec CAS. Il génère une grande table de données (`LARGE_DATA`) directement dans CAS pour simuler un scénario de production. `PROC CARDINALITY` est ensuite exécutée sur cette table CAS. L'utilisation d'une macro (`%run_cardinality_cas`) est montrée pour encapsuler l'exécution, et `OPTIONS MPRINT MLOGIC` est activée pour aider à déboguer et à comprendre le flux d'exécution dans un environnement plus complexe. `MAXLEVELS` est fixé à 10 pour la variable `group_var`, qui a 100 niveaux, démontrant ainsi la capacité de la procédure à gérer les variables à cardinalité élevée de manière efficace dans CAS en regroupant les niveaux excédentaires.
Copié !
1/* Création d'une session CAS */
2options cas nox; /* nox est une option SAS, remplacez-la par l'option CAS appropriée si vous utilisez une interface interactive */
3cas LIBNAME mylib sessref=casauto; /* Assurez-vous que 'casauto' est votre session CAS active */
4 
5/* Simule une grande table CAS directement dans CAS */
6PROC CAS;
7 SESSION casauto;
8 SOURCE:
9 DATA work.large_data;
10 DO i = 1 to 100000; /* 100 000 observations */
11 id = i;
12 group_var = floor(ranuni(0)*100); /* 100 niveaux distincts */
13 category_var = cats('Cat', floor(ranuni(0)*5)); /* 5 niveaux distincts */
14 value_var = ranuni(0);
15 OUTPUT;
16 END;
17 END;
18 casutil.loadtable / casout={name='LARGE_DATA', replace=TRUE, caslib='mylib'}
19 promote=TRUE;
20 ENDSOURCE;
21RUN;
22 
23options mprint mlogic; /* Pour voir les logs d'exécution et les messages macro */
24%macro run_cardinality_cas();
25 PROC CARDINALITY DATA=mylib.large_data outcard=mylib.card_cas outdetails=mylib.details_cas maxlevels=10;
26 var group_var category_var value_var;
27 RUN;
28%mend;
29 
30%run_cardinality_cas; /* Exécution de la macro */
31 
32PROC PRINT DATA=mylib.card_cas(obs=5);
33 title 'Cardinalité des variables sur une grande table CAS (Aperçu)';
34 var _varname_ _type_ _cardinality_ _more_;
35RUN;
36 
37/* Nettoyage */
38PROC CASUTIL incaslib="mylib";
39 drop TABLE "LARGE_DATA" "CARD_CAS" "DETAILS_CAS";
40QUIT;
41 
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.