La procédure CARDINALITY analyse une variable dans un jeu de données CAS pour déterminer son nombre de niveaux uniques (cardinalité). Lorsque des formats définis par l'utilisateur sont appliqués à une variable, la procédure considère ces formats comme des connaissances antérieures et les utilise par défaut pour ordonner les niveaux. Cet exemple se concentre sur la variable engineSize du jeu de données SASHELP.CARS, à laquelle un format engsize est appliqué. Le résultat inclut la cardinalité de la variable formatée et un tableau détaillé des fréquences pour chaque niveau formaté.
Analyse des données
Type : SASHELP
Les exemples utilisent le jeu de données intégré SASHELP.CARS, qui est chargé en session CAS, et des données créées en interne (datalines) pour les démonstrations de formats.
1 Bloc de code
PROC CARDINALITY Data
Explication : Cet exemple de base montre comment définir un format utilisateur pour la variable 'engineSize' et comment la procédure CARDINALITY l'utilise par défaut pour calculer la cardinalité. Il charge le jeu de données 'sashelp.cars' en session CAS, crée un format 'engsize', l'applique à 'engineSize', puis exécute PROC CARDINALITY. Les résultats (_VARNAME_, _ORDER_, _MORE_, _CARDINALITY_, _INDEX_, _FREQ_, _CFMT_) sont ensuite affichés pour confirmer que le format a été pris en compte et que les niveaux sont ordonnés en fonction des libellés du format.
Copié !
/* 1. Charger le jeu de données SASHELP.CARS en session CAS */
proc cas;
session casauto;
caslib _all_ assign;
data casuser.cars;
set sashelp.cars;
run;
quit;
/* 2. Créer un format défini par l'utilisateur pour engineSize */
proc format casfmtlib='casuser.myfmtlib';
value engsize
low - <3 = 'Petit moteur'
3 - <6 = 'Moteur moyen'
6 - high= 'Gros moteur';
run;
/* 3. Appliquer le format à la variable engineSize et charger en CAS */
data casuser.cars;
format engineSize engsize.;
set casuser.cars;
run;
/* 4. Exécuter PROC CARDINALITY avec la variable formatée */
proc cardinality data=casuser.cars outcard=casuser.card outdetails=casuser.details;
var engineSize;
run;
/* 5. Afficher le résumé de cardinalité */
title 'Cardinalité de engineSize avec format défini par l''utilisateur (Basique)';
proc print data=casuser.card;
var _VARNAME_ _ORDER_ _MORE_ _CARDINALITY_;
run;
/* 6. Afficher les détails des niveaux formatés */
title 'Détails des niveaux formatés pour engineSize (Basique)';
proc print data=casuser.details;
var _VARNAME_ _INDEX_ _FREQ_ _CFMT_;
run;
1
/* 1. Charger le jeu de données SASHELP.CARS en session CAS */
2
PROC CAS;
3
SESSION casauto;
4
caslib _all_ assign;
5
DATA casuser.cars;
6
SET sashelp.cars;
7
RUN;
8
QUIT;
9
10
/* 2. Créer un format défini par l'utilisateur pour engineSize */
11
PROC FORMAT casfmtlib='casuser.myfmtlib';
12
value engsize
13
low - <3 = 'Petit moteur'
14
3 - <6 = 'Moteur moyen'
15
6 - high= 'Gros moteur';
16
RUN;
17
18
/* 3. Appliquer le format à la variable engineSize et charger en CAS */
19
DATA casuser.cars;
20
FORMAT engineSize engsize.;
21
SET casuser.cars;
22
RUN;
23
24
/* 4. Exécuter PROC CARDINALITY avec la variable formatée */
title 'Cardinalité de engineSize avec format défini par l''utilisateur (Basique)';
31
PROC PRINTDATA=casuser.card;
32
var _VARNAME_ _ORDER_ _MORE_ _CARDINALITY_;
33
RUN;
34
35
/* 6. Afficher les détails des niveaux formatés */
36
title 'Détails des niveaux formatés pour engineSize (Basique)';
37
PROC PRINTDATA=casuser.details;
38
var _VARNAME_ _INDEX_ _FREQ_ _CFMT_;
39
RUN;
2 Bloc de code
PROC CARDINALITY Data
Explication : Cet exemple intermédiaire utilise un format défini par l'utilisateur incluant la gestion des valeurs manquantes. Il applique le format, introduit intentionnellement des valeurs manquantes dans la variable 'engineSize', puis exécute PROC CARDINALITY avec l'option `ORDER=FORMATTED` pour s'assurer que l'ordonnancement des niveaux se base explicitement sur les libellés du format, y compris le niveau pour les valeurs manquantes.
Copié !
/* 1. Charger le jeu de données SASHELP.CARS en session CAS */
proc cas;
session casauto;
caslib _all_ assign;
data casuser.cars;
set sashelp.cars;
run;
quit;
/* 2. Créer un format défini par l'utilisateur pour engineSize avec une valeur manquante */
proc format casfmtlib='casuser.myfmtlib';
value engsize_plus
low - <3 = 'Type A'
3 - <6 = 'Type B'
6 - high= 'Type C'
. = 'Non spécifié'; /* Gestion des valeurs manquantes */
run;
/* 3. Appliquer le format et introduire des valeurs manquantes */
data casuser.cars_missing;
set casuser.cars;
if mod(_n_, 10) = 0 then call missing(engineSize); /* Introduire des manquants */
format engineSize engsize_plus.;
run;
/* 4. Exécuter PROC CARDINALITY avec ORDER=FORMATTED */
proc cardinality data=casuser.cars_missing outcard=casuser.card_ord outdetails=casuser.details_ord;
var engineSize;
order formatted;
run;
/* 5. Afficher le résumé de cardinalité */
title 'Cardinalité de engineSize avec format défini par l''utilisateur et manquants (Ordonné par format)';
proc print data=casuser.card_ord;
var _VARNAME_ _ORDER_ _MORE_ _CARDINALITY_;
run;
/* 6. Afficher les détails des niveaux formatés */
title 'Détails des niveaux formatés pour engineSize avec manquants (Ordonné par format)';
proc print data=casuser.details_ord;
var _VARNAME_ _INDEX_ _FREQ_ _CFMT_;
run;
1
/* 1. Charger le jeu de données SASHELP.CARS en session CAS */
2
PROC CAS;
3
SESSION casauto;
4
caslib _all_ assign;
5
DATA casuser.cars;
6
SET sashelp.cars;
7
RUN;
8
QUIT;
9
10
/* 2. Créer un format défini par l'utilisateur pour engineSize avec une valeur manquante */
11
PROC FORMAT casfmtlib='casuser.myfmtlib';
12
value engsize_plus
13
low - <3 = 'Type A'
14
3 - <6 = 'Type B'
15
6 - high= 'Type C'
16
. = 'Non spécifié'; /* Gestion des valeurs manquantes */
17
RUN;
18
19
/* 3. Appliquer le format et introduire des valeurs manquantes */
20
DATA casuser.cars_missing;
21
SET casuser.cars;
22
IF mod(_n_, 10) = 0 THEN call missing(engineSize); /* Introduire des manquants */
23
FORMAT engineSize engsize_plus.;
24
RUN;
25
26
/* 4. Exécuter PROC CARDINALITY avec ORDER=FORMATTED */
title 'Cardinalité de engineSize avec format défini par l''utilisateur et manquants (Ordonné par format)';
34
PROC PRINTDATA=casuser.card_ord;
35
var _VARNAME_ _ORDER_ _MORE_ _CARDINALITY_;
36
RUN;
37
38
/* 6. Afficher les détails des niveaux formatés */
39
title 'Détails des niveaux formatés pour engineSize avec manquants (Ordonné par format)';
40
PROC PRINTDATA=casuser.details_ord;
41
var _VARNAME_ _INDEX_ _FREQ_ _CFMT_;
42
RUN;
3 Bloc de code
PROC CARDINALITY Data
Explication : Cet exemple avancé combine l'utilisation de formats définis par l'utilisateur avec un filtrage de données et l'analyse de plusieurs variables. Il crée des formats pour 'driveTrain' et 'fueltype', applique un filtre `WHERE` complexe pour sélectionner un sous-ensemble de véhicules, puis exécute PROC CARDINALITY sur ces variables. L'option `ORDER=FREQ` est utilisée pour ordonner les niveaux par fréquence décroissante, et `MAXLEVELS` est ajusté pour obtenir plus de détails sur les niveaux.
Copié !
/* 1. Charger le jeu de données SASHELP.CARS en session CAS */
proc cas;
session casauto;
caslib _all_ assign;
data casuser.cars;
set sashelp.cars;
run;
quit;
/* 2. Créer un format défini par l'utilisateur complexe */
proc format casfmtlib='casuser.myfmtlib';
value $fueltype
'Premium' = 'Carburant Premium'
'Regular' = 'Carburant Régulier'
other = 'Autre Carburant';
value $drivetrain
'Front' = 'Traction avant'
'Rear' = 'Propulsion'
'All' = 'Quatre roues motrices'
other = 'Inconnu';
run;
/* 3. Appliquer les formats et filtrer les données */
data casuser.cars_filtered;
set casuser.cars;
format driveTrain $drivetrain. fueltype $fueltype.;
where msrp < 30000 and make in ('Audi', 'BMW', 'Mercedes-Benz'); /* Filtrage avancé */
run;
/* 4. Exécuter PROC CARDINALITY sur plusieurs variables formatées */
proc cardinality data=casuser.cars_filtered outcard=casuser.card_adv outdetails=casuser.details_adv maxlevels=10;
var driveTrain fueltype;
order freq; /* Ordonner par fréquence */
run;
/* 5. Afficher les résultats */
title 'Cardinalité des variables formatées (Cas Avancé avec filtrage)';
proc print data=casuser.card_adv;
var _VARNAME_ _ORDER_ _MORE_ _CARDINALITY_;
run;
title 'Détails des niveaux formatés (Cas Avancé avec filtrage)';
proc print data=casuser.details_adv;
var _VARNAME_ _INDEX_ _FREQ_ _CFMT_;
run;
1
/* 1. Charger le jeu de données SASHELP.CARS en session CAS */
2
PROC CAS;
3
SESSION casauto;
4
caslib _all_ assign;
5
DATA casuser.cars;
6
SET sashelp.cars;
7
RUN;
8
QUIT;
9
10
/* 2. Créer un format défini par l'utilisateur complexe */
11
PROC FORMAT casfmtlib='casuser.myfmtlib';
12
value $fueltype
13
'Premium' = 'Carburant Premium'
14
'Regular' = 'Carburant Régulier'
15
other = 'Autre Carburant';
16
17
value $drivetrain
18
'Front' = 'Traction avant'
19
'Rear' = 'Propulsion'
20
'All' = 'Quatre roues motrices'
21
other = 'Inconnu';
22
RUN;
23
24
/* 3. Appliquer les formats et filtrer les données */
25
DATA casuser.cars_filtered;
26
SET casuser.cars;
27
FORMAT driveTrain $drivetrain. fueltype $fueltype.;
28
where msrp < 30000 and make in ('Audi', 'BMW', 'Mercedes-Benz'); /* Filtrage avancé */
29
RUN;
30
31
/* 4. Exécuter PROC CARDINALITY sur plusieurs variables formatées */
title 'Cardinalité des variables formatées (Cas Avancé avec filtrage)';
39
PROC PRINTDATA=casuser.card_adv;
40
var _VARNAME_ _ORDER_ _MORE_ _CARDINALITY_;
41
RUN;
42
43
title 'Détails des niveaux formatés (Cas Avancé avec filtrage)';
44
PROC PRINTDATA=casuser.details_adv;
45
var _VARNAME_ _INDEX_ _FREQ_ _CFMT_;
46
RUN;
4 Bloc de code
PROC CARDINALITY Data
Explication : Ce scénario Viya/CAS est optimisé pour les tables volumineuses. Il simule une grande table de données directement en session CAS, applique des formats définis par l'utilisateur à des variables numériques et caractères, puis exécute PROC CARDINALITY. L'option `NTHREADS` est spécifiquement utilisée pour tirer parti des capacités de traitement parallèle de CAS, ce qui est crucial pour la performance sur de grands ensembles de données. L'option `ESTIMATE METHOD=EXACT` garantit un calcul précis de la cardinalité, même avec des données volumineuses. Après l'analyse, les tables temporaires sont supprimées.
Copié !
/* 1. Créer une grande table CAS pour la démonstration */
proc cas;
session casauto;
caslib _all_ assign;
data casuser.large_data;
do i = 1 to 100000; /* 100 000 observations */
engineSize_raw = ranuni(12345) * 10; /* Générer des tailles moteur continues */
if engineSize_raw < 3 then engineSize = 1; /* Simuler des groupes pour le format */
else if engineSize_raw < 6 then engineSize = 2;
else engineSize = 3;
fueltype_raw = rand('UNIFORM') * 3;
if fueltype_raw < 1 then fueltype_char = 'Premium';
else if fueltype_raw < 2 then fueltype_char = 'Regular';
else fueltype_char = 'Diesel';
output;
end;
run;
quit;
/* 2. Créer les formats définis par l'utilisateur */
proc format casfmtlib='casuser.myfmtlib';
value large_engsize
1 = 'Petite Moteur (CAS)'
2 = 'Moteur Moyen (CAS)'
3 = 'Gros Moteur (CAS)';
value $large_fueltype
'Premium' = 'Carburant Premium (CAS)'
'Regular' = 'Carburant Régulier (CAS)'
'Diesel' = 'Carburant Diesel (CAS)';
run;
/* 3. Appliquer les formats à la grande table CAS */
data casuser.large_data;
set casuser.large_data;
format engineSize large_engsize. fueltype_char $large_fueltype.;
run;
/* 4. Exécuter PROC CARDINALITY en parallèle sur la grande table */
proc cardinality data=casuser.large_data outcard=casuser.card_large outdetails=casuser.details_large;
var engineSize fueltype_char;
nthreads=4; /* Utilisation de threads pour une exécution parallèle */
estimate method=exact; /* Assurer un calcul exact de cardinalité */
run;
/* 5. Afficher les résultats pour la table volumineuse */
title 'Cardinalité des variables formatées sur une table volumineuse (CAS/Parallèle)';
proc print data=casuser.card_large;
var _VARNAME_ _ORDER_ _MORE_ _CARDINALITY_;
run;
title 'Détails des niveaux formatés sur une table volumineuse (CAS/Parallèle)';
proc print data=casuser.details_large;
var _VARNAME_ _INDEX_ _FREQ_ _CFMT_;
run;
/* 6. Supprimer la table temporaire */
proc cas;
session casauto;
table.dropTable(name='large_data', caslib='casuser');
table.dropTable(name='card_large', caslib='casuser');
table.dropTable(name='details_large', caslib='casuser');
quit;
1
/* 1. Créer une grande table CAS pour la démonstration */
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.