Veröffentlicht am :
Statistik SASHELP

Verfahren CARDINALITY: Variable mit benutzerdefiniertem Format

Dieser Code ist auch verfügbar auf: English Español Français
Wartet auf Validierung
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/* 1. Charger le jeu de données SASHELP.CARS en session CAS */
2PROC CAS;
3 SESSION casauto;
4 caslib _all_ assign;
5 DATA casuser.cars;
6 SET sashelp.cars;
7 RUN;
8QUIT;
9 
10/* 2. Créer un format défini par l'utilisateur pour engineSize */
11PROC FORMAT casfmtlib='casuser.myfmtlib';
12 value engsize
13 low - <3 = 'Petit moteur'
14 3 - <6 = 'Moteur moyen'
15 6 - high= 'Gros moteur';
16RUN;
17 
18/* 3. Appliquer le format à la variable engineSize et charger en CAS */
19DATA casuser.cars;
20 FORMAT engineSize engsize.;
21 SET casuser.cars;
22RUN;
23 
24/* 4. Exécuter PROC CARDINALITY avec la variable formatée */
25PROC CARDINALITY DATA=casuser.cars outcard=casuser.card outdetails=casuser.details;
26 var engineSize;
27RUN;
28 
29/* 5. Afficher le résumé de cardinalité */
30title 'Cardinalité de engineSize avec format défini par l''utilisateur (Basique)';
31PROC PRINT DATA=casuser.card;
32 var _VARNAME_ _ORDER_ _MORE_ _CARDINALITY_;
33RUN;
34 
35/* 6. Afficher les détails des niveaux formatés */
36title 'Détails des niveaux formatés pour engineSize (Basique)';
37PROC PRINT DATA=casuser.details;
38 var _VARNAME_ _INDEX_ _FREQ_ _CFMT_;
39RUN;
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/* 1. Charger le jeu de données SASHELP.CARS en session CAS */
2PROC CAS;
3 SESSION casauto;
4 caslib _all_ assign;
5 DATA casuser.cars;
6 SET sashelp.cars;
7 RUN;
8QUIT;
9 
10/* 2. Créer un format défini par l'utilisateur pour engineSize avec une valeur manquante */
11PROC 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 */
17RUN;
18 
19/* 3. Appliquer le format et introduire des valeurs manquantes */
20DATA 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.;
24RUN;
25 
26/* 4. Exécuter PROC CARDINALITY avec ORDER=FORMATTED */
27PROC CARDINALITY DATA=casuser.cars_missing outcard=casuser.card_ord outdetails=casuser.details_ord;
28 var engineSize;
29 order formatted;
30RUN;
31 
32/* 5. Afficher le résumé de cardinalité */
33title 'Cardinalité de engineSize avec format défini par l''utilisateur et manquants (Ordonné par format)';
34PROC PRINT DATA=casuser.card_ord;
35 var _VARNAME_ _ORDER_ _MORE_ _CARDINALITY_;
36RUN;
37 
38/* 6. Afficher les détails des niveaux formatés */
39title 'Détails des niveaux formatés pour engineSize avec manquants (Ordonné par format)';
40PROC PRINT DATA=casuser.details_ord;
41 var _VARNAME_ _INDEX_ _FREQ_ _CFMT_;
42RUN;
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/* 1. Charger le jeu de données SASHELP.CARS en session CAS */
2PROC CAS;
3 SESSION casauto;
4 caslib _all_ assign;
5 DATA casuser.cars;
6 SET sashelp.cars;
7 RUN;
8QUIT;
9 
10/* 2. Créer un format défini par l'utilisateur complexe */
11PROC 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';
22RUN;
23 
24/* 3. Appliquer les formats et filtrer les données */
25DATA 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é */
29RUN;
30 
31/* 4. Exécuter PROC CARDINALITY sur plusieurs variables formatées */
32PROC CARDINALITY DATA=casuser.cars_filtered outcard=casuser.card_adv outdetails=casuser.details_adv maxlevels=10;
33 var driveTrain fueltype;
34 order freq; /* Ordonner par fréquence */
35RUN;
36 
37/* 5. Afficher les résultats */
38title 'Cardinalité des variables formatées (Cas Avancé avec filtrage)';
39PROC PRINT DATA=casuser.card_adv;
40 var _VARNAME_ _ORDER_ _MORE_ _CARDINALITY_;
41RUN;
42 
43title 'Détails des niveaux formatés (Cas Avancé avec filtrage)';
44PROC PRINT DATA=casuser.details_adv;
45 var _VARNAME_ _INDEX_ _FREQ_ _CFMT_;
46RUN;
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/* 1. Créer une grande table CAS pour la démonstration */
2PROC CAS;
3 SESSION casauto;
4 caslib _all_ assign;
5 
6 DATA casuser.large_data;
7 DO i = 1 to 100000; /* 100 000 observations */
8 engineSize_raw = ranuni(12345) * 10; /* Générer des tailles moteur continues */
9 IF engineSize_raw < 3 THEN engineSize = 1; /* Simuler des groupes pour le format */
10 ELSE IF engineSize_raw < 6 THEN engineSize = 2;
11 ELSE engineSize = 3;
12 
13 fueltype_raw = rand('UNIFORM') * 3;
14 IF fueltype_raw < 1 THEN fueltype_char = 'Premium';
15 ELSE IF fueltype_raw < 2 THEN fueltype_char = 'Regular';
16 ELSE fueltype_char = 'Diesel';
17 
18 OUTPUT;
19 END;
20 RUN;
21QUIT;
22 
23/* 2. Créer les formats définis par l'utilisateur */
24PROC FORMAT casfmtlib='casuser.myfmtlib';
25 value large_engsize
26 1 = 'Petite Moteur (CAS)'
27 2 = 'Moteur Moyen (CAS)'
28 3 = 'Gros Moteur (CAS)';
29 value $large_fueltype
30 'Premium' = 'Carburant Premium (CAS)'
31 'Regular' = 'Carburant Régulier (CAS)'
32 'Diesel' = 'Carburant Diesel (CAS)';
33RUN;
34 
35/* 3. Appliquer les formats à la grande table CAS */
36DATA casuser.large_data;
37 SET casuser.large_data;
38 FORMAT engineSize large_engsize. fueltype_char $large_fueltype.;
39RUN;
40 
41/* 4. Exécuter PROC CARDINALITY en parallèle sur la grande table */
42PROC CARDINALITY DATA=casuser.large_data outcard=casuser.card_large outdetails=casuser.details_large;
43 var engineSize fueltype_char;
44 nthreads=4; /* Utilisation de threads pour une exécution parallèle */
45 estimate method=exact; /* Assurer un calcul exact de cardinalité */
46RUN;
47 
48/* 5. Afficher les résultats pour la table volumineuse */
49title 'Cardinalité des variables formatées sur une table volumineuse (CAS/Parallèle)';
50PROC PRINT DATA=casuser.card_large;
51 var _VARNAME_ _ORDER_ _MORE_ _CARDINALITY_;
52RUN;
53 
54title 'Détails des niveaux formatés sur une table volumineuse (CAS/Parallèle)';
55PROC PRINT DATA=casuser.details_large;
56 var _VARNAME_ _INDEX_ _FREQ_ _CFMT_;
57RUN;
58 
59/* 6. Supprimer la table temporaire */
60PROC CAS;
61 SESSION casauto;
62 TABLE.dropTable(name='large_data', caslib='casuser');
63 TABLE.dropTable(name='card_large', caslib='casuser');
64 TABLE.dropTable(name='details_large', caslib='casuser');
65QUIT;
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.