El procedimiento CARDINALITY analiza una variable en un conjunto de datos CAS para determinar su número de niveles únicos (cardinalidad). Cuando se aplican formatos definidos por el usuario a una variable, el procedimiento considera estos formatos como conocimiento previo y los utiliza por defecto para ordenar los niveles. Este ejemplo se centra en la variable engineSize del conjunto de datos SASHELP.CARS, a la que se aplica un formato engsize. El resultado incluye la cardinalidad de la variable formateada y una tabla detallada de frecuencias para cada nivel formateado.
Análisis de datos
Type : SASHELP
Los ejemplos utilizan el conjunto de datos integrado SASHELP.CARS, que se carga en la sesión CAS, y datos creados internamente (datalines) para las demostraciones de formatos.
1 Bloque de código
PROC CARDINALITY Data
Explicación : Este ejemplo básico muestra cómo definir un formato de usuario para la variable 'engineSize' y cómo el procedimiento CARDINALITY lo utiliza por defecto para calcular la cardinalidad. Carga el conjunto de datos 'sashelp.cars' en la sesión CAS, crea un formato 'engsize', lo aplica a 'engineSize' y luego ejecuta PROC CARDINALITY. Los resultados (_VARNAME_, _ORDER_, _MORE_, _CARDINALITY_, _INDEX_, _FREQ_, _CFMT_) se muestran a continuación para confirmar que el formato ha sido tenido en cuenta y que los niveles están ordenados según las etiquetas del formato.
¡Copiado!
/* 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 Bloque de código
PROC CARDINALITY Data
Explicación : Este ejemplo intermedio utiliza un formato definido por el usuario que incluye el manejo de valores perdidos. Aplica el formato, introduce intencionadamente valores perdidos en la variable 'engineSize', y luego ejecuta PROC CARDINALITY con la opción `ORDER=FORMATTED` para asegurar que la ordenación de los niveles se base explícitamente en las etiquetas del formato, incluyendo el nivel para los valores perdidos.
¡Copiado!
/* 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 Bloque de código
PROC CARDINALITY Data
Explicación : Este ejemplo avanzado combina el uso de formatos definidos por el usuario con el filtrado de datos y el análisis de múltiples variables. Crea formatos para 'driveTrain' y 'fueltype', aplica un filtro `WHERE` complejo para seleccionar un subconjunto de vehículos, y luego ejecuta PROC CARDINALITY sobre estas variables. La opción `ORDER=FREQ` se utiliza para ordenar los niveles por frecuencia decreciente, y `MAXLEVELS` se ajusta para obtener más detalles sobre los niveles.
¡Copiado!
/* 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 Bloque de código
PROC CARDINALITY Data
Explicación : Este escenario Viya/CAS está optimizado para tablas grandes. Simula una tabla de datos grande directamente en la sesión CAS, aplica formatos definidos por el usuario a variables numéricas y de caracteres, y luego ejecuta PROC CARDINALITY. La opción `NTHREADS` se utiliza específicamente para aprovechar las capacidades de procesamiento paralelo de CAS, lo cual es crucial para el rendimiento en grandes conjuntos de datos. La opción `ESTIMATE METHOD=EXACT` garantiza un cálculo preciso de la cardinalidad, incluso con datos grandes. Después del análisis, las tablas temporales son eliminadas.
¡Copiado!
/* 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 */
Este material se proporciona "tal cual" por We Are Cas. No hay garantías, expresas o implícitas, en cuanto a la comerciabilidad o idoneidad para un propósito particular con respecto a los materiales o el código contenidos en este documento. We Are Cas no es responsable de los errores en este material tal como existe ahora o existirá, ni We Are Cas proporciona soporte técnico para el mismo.
SAS y todos los demás nombres de productos o servicios de SAS Institute Inc. son marcas registradas o marcas comerciales de SAS Institute Inc. en los EE. UU. y otros países. ® indica registro en los EE. UU. WeAreCAS es un sitio comunitario independiente y no está afiliado a SAS Institute Inc.
Este sitio utiliza cookies técnicas y analíticas para mejorar su experiencia.
Saber más.