Die CARDINALITY-Prozedur analysiert eine Variable in einem CAS-Datensatz, um die Anzahl ihrer eindeutigen Ebenen (Kardinalität) zu bestimmen. Wenn benutzerdefinierte Formate auf eine Variable angewendet werden, betrachtet die Prozedur diese Formate als Vorwissen und verwendet sie standardmäßig zur Sortierung der Ebenen. Dieses Beispiel konzentriert sich auf die Variable engineSize aus dem SASHELP.CARS-Datensatz, auf die ein engsize-Format angewendet wird. Das Ergebnis umfasst die Kardinalität der formatierten Variablen und eine detaillierte Häufigkeitstabelle für jede formatierte Ebene.
Datenanalyse
Type : SASHELP
Die Beispiele verwenden den integrierten SASHELP.CARS-Datensatz, der in eine CAS-Sitzung geladen wird, und intern erstellte Daten (Datalines) für Formatdemonstrationen.
1 Codeblock
PROC CARDINALITY Data
Erklärung : Dieses grundlegende Beispiel zeigt, wie man ein benutzerdefiniertes Format für die Variable 'engineSize' definiert und wie die CARDINALITY-Prozedur es standardmäßig zur Berechnung der Kardinalität verwendet. Es lädt den 'sashelp.cars'-Datensatz in eine CAS-Sitzung, erstellt ein 'engsize'-Format, wendet es auf 'engineSize' an und führt dann PROC CARDINALITY aus. Die Ergebnisse (_VARNAME_, _ORDER_, _MORE_, _CARDINALITY_, _INDEX_, _FREQ_, _CFMT_) werden dann angezeigt, um zu bestätigen, dass das Format berücksichtigt wurde und die Ebenen gemäß den Formatbezeichnungen sortiert sind.
Kopiert!
/* 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 Codeblock
PROC CARDINALITY Data
Erklärung : Dieses Zwischenbeispiel verwendet ein benutzerdefiniertes Format, das die Behandlung fehlender Werte beinhaltet. Es wendet das Format an, führt absichtlich fehlende Werte in die Variable 'engineSize' ein und führt dann PROC CARDINALITY mit der Option `ORDER=FORMATTED` aus, um sicherzustellen, dass die Sortierung der Ebenen explizit auf den Formatbezeichnungen basiert, einschließlich der Ebene für fehlende Werte.
Kopiert!
/* 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 Codeblock
PROC CARDINALITY Data
Erklärung : Dieses erweiterte Beispiel kombiniert die Verwendung benutzerdefinierter Formate mit Datenfilterung und der Analyse mehrerer Variablen. Es erstellt Formate für 'driveTrain' und 'fueltype', wendet einen komplexen `WHERE`-Filter an, um eine Untergruppe von Fahrzeugen auszuwählen, und führt dann PROC CARDINALITY für diese Variablen aus. Die Option `ORDER=FREQ` wird verwendet, um die Ebenen nach abnehmender Häufigkeit zu sortieren, und `MAXLEVELS` wird angepasst, um weitere Details zu den Ebenen zu erhalten.
Kopiert!
/* 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 Codeblock
PROC CARDINALITY Data
Erklärung : Dieses Viya/CAS-Szenario ist für große Tabellen optimiert. Es simuliert eine große Datentabelle direkt in einer CAS-Sitzung, wendet benutzerdefinierte Formate auf numerische und Zeichenvariablen an und führt dann PROC CARDINALITY aus. Die Option `NTHREADS` wird speziell verwendet, um die Vorteile der parallelen Verarbeitungsfunktionen von CAS zu nutzen, was für die Leistung bei großen Datensätzen entscheidend ist. Die Option `ESTIMATE METHOD=EXACT` gewährleistet eine genaue Kardinalitätsberechnung, selbst bei großen Datenmengen. Nach der Analyse werden die temporären Tabellen gelöscht.
Kopiert!
/* 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 */
Dieses Material wird von We Are Cas "wie besehen" zur Verfügung gestellt. Es gibt keine ausdrücklichen oder stillschweigenden Garantien hinsichtlich der Marktgängigkeit oder Eignung für einen bestimmten Zweck in Bezug auf die hierin enthaltenen Materialien oder Codes. We Are Cas ist nicht verantwortlich für Fehler in diesem Material, wie es jetzt existiert oder existieren wird, noch bietet We Are Cas technischen Support dafür an.
SAS und alle anderen Produkt- oder Dienstleistungsnamen von SAS Institute Inc. sind eingetragene Marken oder Marken von SAS Institute Inc. in den USA und anderen Ländern. ® zeigt die Registrierung in den USA an. WeAreCAS ist eine unabhängige Community-Site und nicht mit SAS Institute Inc. verbunden.
Diese Website verwendet technische und analytische Cookies, um Ihre Erfahrung zu verbessern.
Mehr erfahren.