La procédure CARDINALITY permet d'analyser la cardinalité des variables d'un jeu de données CAS. Elle peut identifier le nombre de niveaux uniques pour chaque variable spécifiée et, si le nombre de niveaux dépasse une limite définie (MAXLEVELS), elle rapporte les niveaux les plus fréquents. L'option ORDER= dans l'instruction VAR permet de spécifier un ordre de tri (par exemple, ASC pour ascendant, DESC pour descendant) pour la sélection et l'affichage des niveaux de la variable, ignorant ainsi les formats utilisateur par défaut ou l'ordre alphabétique standard. Cet exemple montre comment appliquer un ordre ascendant numérique à la variable 'engineSize'.
Analyse des données
Type : SASHELP / CREATION_INTERNE
Les exemples utilisent le jeu de données intégré 'sashelp.cars' et des données générées via DATA Step pour garantir l'autonomie.
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 'sashelp.cars' dans une session CAS (mylib.cars) puis analyse les variables 'Make', 'Model' et 'Type' pour déterminer leur cardinalité sans spécifier d'ordre particulier. Les résultats sont stockés dans 'mylib.card_basic' et affichés. L'ordre par défaut est alphabétique ou par ordre de fréquence si un seuil est atteint.
Copié !
/* Étape DATA pour charger sashelp.cars dans une bibliothèque CAS */
libname mylib cas;
data mylib.cars;
set sashelp.cars;
run;
/* Utilisation de base de PROC CARDINALITY */
title 'Cardinalité des variables par défaut';
proc cardinality data=mylib.cars outcard=mylib.card_basic;
var Make Model Type;
run;
proc print data=mylib.card_basic;
var _varname_ _order_ _cardinality_;
title 'Résumé de la cardinalité (Basique)';
run;
1
/* Étape DATA pour charger sashelp.cars dans une bibliothèque CAS */
Explication : Cet exemple reprend la logique de la documentation originale. Il analyse la variable 'engineSize' du jeu de données 'mylib.cars'. L'option `ORDER=ASC` est utilisée dans l'instruction VAR pour forcer un tri ascendant des niveaux de 'engineSize', en ignorant les formats éventuels. `MAXLEVELS=5` limite l'affichage détaillé aux 5 premiers niveaux. Les tables de sortie `outcard` et `outdetails` sont utilisées pour stocker et afficher les résultats.
Copié !
/* Étape DATA pour charger sashelp.cars dans une bibliothèque CAS */
libname mylib cas;
data mylib.cars;
set sashelp.cars;
run;
/* Forcer un ordre ascendant sur 'engineSize' */
title 'Cardinalité de engineSize avec ordre ascendant et MAXLEVELS';
proc cardinality data=mylib.cars outcard=mylib.card_asc outdetails=mylib.details_asc maxlevels=5;
var engineSize / order=asc;
run;
proc print data=mylib.card_asc;
var _varname_ _order_ _more_ _cardinality_;
title 'Résumé de la cardinalité (Ordre ASC)';
run;
/* Afficher les détails des niveaux */
proc print data=mylib.details_asc;
title 'Détails des niveaux de engineSize (Ordre ASC)';
run;
1
/* Étape DATA pour charger sashelp.cars dans une bibliothèque CAS */
2
LIBNAME mylib cas;
3
DATA mylib.cars;
4
SET sashelp.cars;
5
RUN;
6
7
/* Forcer un ordre ascendant sur 'engineSize' */
8
title 'Cardinalité de engineSize avec ordre ascendant et MAXLEVELS';
title 'Détails des niveaux de engineSize (Ordre ASC)';
21
RUN;
3 Bloc de code
PROC CARDINALITY Data
Explication : Cet exemple avancé montre comment gérer une variable catégorielle (`Status`) avec un format utilisateur (`$statusfmt.`). Le jeu de données `mylib.employees` est créé avec des `datalines` puis chargé en CAS. La procédure CARDINALITY est utilisée avec `ORDER=DESC` pour trier les niveaux uniques de 'Status' par ordre descendant basé sur leurs valeurs brutes (A, I, S), et non leurs formats affichés (Actif, Inactif, Suspendu).
Copié !
/* Création de données avec un format utilisateur et chargement en CAS */
libname mylib cas;
proc format;
value $statusfmt 'A' = 'Actif' 'I' = 'Inactif' 'S' = 'Suspendu';
run;
data mylib.employees;
input EmployeeID Status $ Salary;
format Status $statusfmt.;
datalines;
101 A 50000
102 I 60000
103 A 55000
104 S 70000
105 A 48000
106 I 62000
107 S 75000
108 A 51000
109 I 58000
110 A 53000
;
run;
/* Analyse de la cardinalité avec ordre descendant pour la variable Status */
title 'Cardinalité de Status avec ordre descendant sur les valeurs brutes';
proc cardinality data=mylib.employees outcard=mylib.card_desc outdetails=mylib.details_desc maxlevels=3;
var Status / order=desc;
run;
proc print data=mylib.card_desc;
var _varname_ _order_ _cardinality_;
title 'Résumé de la cardinalité (Ordre DESC)';
run;
proc print data=mylib.details_desc;
title 'Détails des niveaux de Status (Ordre DESC)';
run;
1
/* Création de données avec un format utilisateur et chargement en CAS */
2
LIBNAME mylib cas;
3
4
PROC FORMAT;
5
value $statusfmt 'A' = 'Actif''I' = 'Inactif''S' = 'Suspendu';
6
RUN;
7
8
DATA mylib.employees;
9
INPUT EmployeeID STATUS $ Salary;
10
FORMATSTATUS $statusfmt.;
11
DATALINES;
12
101 A 50000
13
102 I 60000
14
103 A 55000
15
104 S 70000
16
105 A 48000
17
106 I 62000
18
107 S 75000
19
108 A 51000
20
109 I 58000
21
110 A 53000
22
;
23
RUN;
24
25
/* Analyse de la cardinalité avec ordre descendant pour la variable Status */
26
title 'Cardinalité de Status avec ordre descendant sur les valeurs brutes';
title 'Détails des niveaux de Status (Ordre DESC)';
38
RUN;
4 Bloc de code
PROC CARDINALITY
Explication : Cet exemple met en évidence des fonctionnalités plus avancées de `PROC CARDINALITY` en environnement CAS. Il utilise l'instruction `GROUP BY` pour calculer la cardinalité de la variable `Type` séparément pour chaque `Origin` (pays d'origine). L'option `ORDER=FREQ` est appliquée pour trier les niveaux de `Type` par leur fréquence d'apparition. Un `MAXLEVELS=2` est délibérément bas pour montrer comment la colonne `_MORE_` indique les niveaux non rapportés, simulant un cas où certains groupes pourraient avoir plus de niveaux uniques que ce qui est affiché. Cela démontre la gestion de grands volumes de données et la capacité à identifier rapidement des problématiques de cardinalité élevée par groupe.
Copié !
/* Assurez-vous que sashelp.cars est chargé en CAS */
libname mylib cas;
data mylib.cars;
set sashelp.cars;
run;
/* Analyse de cardinalité groupée avec un MAXLEVELS très bas pour simuler un dépassement */
title 'Cardinalité groupée avec peu de niveaux affichés';
proc cardinality data=mylib.cars outcard=mylib.card_grouped outdetails=mylib.details_grouped maxlevels=2;
var Type / order=freq;
class Origin;
group by Origin;
run;
proc print data=mylib.card_grouped;
var Origin _varname_ _order_ _cardinality_;
title 'Résumé de la cardinalité groupée';
run;
proc print data=mylib.details_grouped;
where _varname_ = 'Type';
title 'Détails des niveaux de Type (groupé par Origin)';
run;
1
/* Assurez-vous que sashelp.cars est chargé en CAS */
2
LIBNAME mylib cas;
3
DATA mylib.cars;
4
SET sashelp.cars;
5
RUN;
6
7
/* Analyse de cardinalité groupée avec un MAXLEVELS très bas pour simuler un dépassement */
8
title 'Cardinalité groupée avec peu de niveaux affichés';
title 'Détails des niveaux de Type (groupé par Origin)';
23
RUN;
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.