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é !
/* Création d'une session CAS et chargement des données SASHELP.IRIS */
options cas nox; /* nox est une option SAS, remplacez-la par l'option CAS appropriée si vous utilisez une interface interactive */
cas libname mylib sessref=casauto; /* Assurez-vous que 'casauto' est votre session CAS active */
data mylib.iris;
set sashelp.iris;
run;
proc cardinality data=mylib.iris outcard=mylib.card_basic outdetails=mylib.details_basic;
run;
proc print data=mylib.card_basic;
title 'Cardinalité des variables (Basique)';
var _varname_ _type_ _cardinality_ _more_ _visible_ _min_ _max_;
run;
/* Nettoyage */
proc casutil incaslib="mylib";
drop table "IRIS" "CARD_BASIC" "DETAILS_BASIC";
quit;
1
/* Création d'une session CAS et chargement des données SASHELP.IRIS */
2
options cas nox; /* nox est une option SAS, remplacez-la par l'option CAS appropriée si vous utilisez une interface interactive */
3
cas LIBNAME mylib sessref=casauto; /* Assurez-vous que 'casauto' est votre session CAS active */
var _varname_ _type_ _cardinality_ _more_ _visible_ _min_ _max_;
15
RUN;
16
17
/* Nettoyage */
18
PROC CASUTIL incaslib="mylib";
19
drop TABLE"IRIS""CARD_BASIC""DETAILS_BASIC";
20
QUIT;
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é !
/* Création d'une session CAS et chargement des données SASHELP.IRIS */
options cas nox; /* nox est une option SAS, remplacez-la par l'option CAS appropriée si vous utilisez une interface interactive */
cas libname mylib sessref=casauto; /* Assurez-vous que 'casauto' est votre session CAS active */
data mylib.iris;
set sashelp.iris;
run;
proc cardinality data=mylib.iris outcard=mylib.card_freq outdetails=mylib.details_freq maxlevels=5 order=freq;
var SepalLength;
run;
proc print data=mylib.card_freq;
title 'Cardinalité des variables (Options courantes - MAXLEVELS=5, ORDER=FREQ)';
var _varname_ _type_ _cardinality_ _more_ _visible_ _min_ _max_;
run;
proc print data=mylib.details_freq;
title 'Détails des niveaux pour SepalLength (MAXLEVELS=5, ORDER=FREQ)';
where _varname_ = 'SepalLength';
run;
/* Nettoyage */
proc casutil incaslib="mylib";
drop table "IRIS" "CARD_FREQ" "DETAILS_FREQ";
quit;
1
/* Création d'une session CAS et chargement des données SASHELP.IRIS */
2
options cas nox; /* nox est une option SAS, remplacez-la par l'option CAS appropriée si vous utilisez une interface interactive */
3
cas LIBNAME mylib sessref=casauto; /* Assurez-vous que 'casauto' est votre session CAS active */
title 'Cardinalité des variables (Options courantes - MAXLEVELS=5, ORDER=FREQ)';
15
var _varname_ _type_ _cardinality_ _more_ _visible_ _min_ _max_;
16
RUN;
17
18
PROC PRINTDATA=mylib.details_freq;
19
title 'Détails des niveaux pour SepalLength (MAXLEVELS=5, ORDER=FREQ)';
20
where _varname_ = 'SepalLength';
21
RUN;
22
23
/* Nettoyage */
24
PROC CASUTIL incaslib="mylib";
25
drop TABLE"IRIS""CARD_FREQ""DETAILS_FREQ";
26
QUIT;
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é !
/* Création d'une session CAS */
options cas nox; /* nox est une option SAS, remplacez-la par l'option CAS appropriée si vous utilisez une interface interactive */
cas libname mylib sessref=casauto; /* Assurez-vous que 'casauto' est votre session CAS active */
/* Création d'un format personnalisé */
proc format;
value $genrefmt 'M'='Masculin' 'F'='Féminin' other='Inconnu';
value agegrpfmt low-20='Jeune' 21-50='Adulte' other='Senior';
run;
/* Création d'un jeu de données avec des valeurs manquantes et une variable catégorielle */
data mylib.personnes;
input ID Nom $ Age Genre $;
datalines;
1 Alice 25 F
2 Bob 30 M
3 Charlie . M
4 Diana 40 F
5 Eve 22 F
6 Frank 55 M
7 Grace 38 F
8 Henry . M
9 Isla 19 F
10 Jack 60 M
;
run;
%let max_levels_limit = 3;
proc cardinality data=mylib.personnes outcard=mylib.card_adv outdetails=mylib.details_adv
maxlevels=&max_levels_limit missing;
format Genre $genrefmt. Age agegrpfmt.;
run;
proc print data=mylib.card_adv;
title 'Cardinalité des variables (Avancé - MISSING, Formats, MAXLEVELS=%str(&max_levels_limit))';
var _varname_ _type_ _cardinality_ _more_ _visible_ _min_ _max_;
run;
proc print data=mylib.details_adv;
title 'Détails des niveaux (Avancé - Genre et Age)';
where _varname_ in ('Genre', 'Age');
run;
/* Nettoyage */
proc casutil incaslib="mylib";
drop table "PERSONNES" "CARD_ADV" "DETAILS_ADV";
quit;
1
/* Création d'une session CAS */
2
options cas nox; /* nox est une option SAS, remplacez-la par l'option CAS appropriée si vous utilisez une interface interactive */
3
cas LIBNAME mylib sessref=casauto; /* Assurez-vous que 'casauto' est votre session CAS active */
4
5
/* Création d'un format personnalisé */
6
PROC FORMAT;
7
value $genrefmt 'M'='Masculin''F'='Féminin' other='Inconnu';
8
value agegrpfmt low-20='Jeune'21-50='Adulte' other='Senior';
9
RUN;
10
11
/* Création d'un jeu de données avec des valeurs manquantes et une variable catégorielle */
title 'Cardinalité des variables (Avancé - MISSING, Formats, MAXLEVELS=%str(&max_levels_limit))';
37
var _varname_ _type_ _cardinality_ _more_ _visible_ _min_ _max_;
38
RUN;
39
40
PROC PRINTDATA=mylib.details_adv;
41
title 'Détails des niveaux (Avancé - Genre et Age)';
42
where _varname_ in ('Genre', 'Age');
43
RUN;
44
45
/* Nettoyage */
46
PROC CASUTIL incaslib="mylib";
47
drop TABLE"PERSONNES""CARD_ADV""DETAILS_ADV";
48
QUIT;
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é !
/* Création d'une session CAS */
options cas nox; /* nox est une option SAS, remplacez-la par l'option CAS appropriée si vous utilisez une interface interactive */
cas libname mylib sessref=casauto; /* Assurez-vous que 'casauto' est votre session CAS active */
/* Simule une grande table CAS directement dans CAS */
proc cas;
session casauto;
source:
data work.large_data;
do i = 1 to 100000; /* 100 000 observations */
id = i;
group_var = floor(ranuni(0)*100); /* 100 niveaux distincts */
category_var = cats('Cat', floor(ranuni(0)*5)); /* 5 niveaux distincts */
value_var = ranuni(0);
output;
end;
end;
casutil.loadtable / casout={name='LARGE_DATA', replace=TRUE, caslib='mylib'}
promote=TRUE;
endsource;
run;
options mprint mlogic; /* Pour voir les logs d'exécution et les messages macro */
%macro run_cardinality_cas();
proc cardinality data=mylib.large_data outcard=mylib.card_cas outdetails=mylib.details_cas maxlevels=10;
var group_var category_var value_var;
run;
%mend;
%run_cardinality_cas; /* Exécution de la macro */
proc print data=mylib.card_cas(obs=5);
title 'Cardinalité des variables sur une grande table CAS (Aperçu)';
var _varname_ _type_ _cardinality_ _more_;
run;
/* Nettoyage */
proc casutil incaslib="mylib";
drop table "LARGE_DATA" "CARD_CAS" "DETAILS_CAS";
quit;
1
/* Création d'une session CAS */
2
options cas nox; /* nox est une option SAS, remplacez-la par l'option CAS appropriée si vous utilisez une interface interactive */
3
cas LIBNAME mylib sessref=casauto; /* Assurez-vous que 'casauto' est votre session CAS active */
4
5
/* Simule une grande table CAS directement dans CAS */
title 'Cardinalité des variables sur une grande table CAS (Aperçu)';
34
var _varname_ _type_ _cardinality_ _more_;
35
RUN;
36
37
/* Nettoyage */
38
PROC CASUTIL incaslib="mylib";
39
drop TABLE"LARGE_DATA""CARD_CAS""DETAILS_CAS";
40
QUIT;
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.
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.