/****************************************************************************** * Programme : Feature Engineering : Distinguez instantanément variables continues et catégorielles (High Cardinality) pour vos modèles * Reference : ANALYSD175 * Source : https://www.wearecas.eu/en/sampleCode/ANALYSD175 ******************************************************************************/ /* --- BLOC 1 --- */ CAS; libname mycas cas; /* Charger le jeu de données Iris de SASHELP vers la session CAS */ data mycas.iris; set sashelp.iris; run; /* Exemple 1 : Utilisation Basique pour la variable Species */ proc cardinality data=mycas.iris outcard=mycas.card_species outdetails=mycas.details_species; var Species; run; proc print data=mycas.card_species; title 'Cardinalité basique pour la variable Species'; run; proc print data=mycas.details_species; title 'Détails des niveaux pour la variable Species'; run; /* --- BLOC 2 --- */ /* Exemple 2 : Utilisation avec des options courantes (MAXLEVELS et DESCENDING) */ /* Analyse de SepalLength avec un nombre limité de niveaux affichés et tri décroissant */ proc cardinality data=mycas.iris outcard=mycas.card_sepal_full outdetails=mycas.details_sepal_full maxlevels=10 descending; var SepalLength; run; proc print data=mycas.card_sepal_full; title 'Cardinalité complète pour SepalLength (10 niveaux max, ordre décroissant)'; run; proc sgplot data=mycas.details_sepal_full; vbar _cfmt_ / freq=_freq_ categoryorder=data; title 'Histogramme des 10 niveaux les plus fréquents de SepalLength'; run; /* --- BLOC 3 --- */ /* Exemple 3 : Cas Avancé - Analyse des niveaux de SepalLength > 4.7 et visualisation */ proc cardinality data=mycas.iris (where=(SepalLength > 4.7)) outcard=mycas.card_sepal_gt47 outdetails=mycas.details_sepal_gt47 maxlevels=5; /* Limite à 5 niveaux pour cet exemple */ var SepalLength; run; /* Préparation des données pour SGPLOT : ajoute '>' aux niveaux 'Autres' pour le graphique */ data mycas.sp_gt47; set mycas.details_sepal_gt47; label _cfmt_='Valeur formatée de SepalLength > 4.7'; if _index_ = . then do; /* Si _index_ est manquant, c'est la catégorie 'Autres' */ _cfmt_=cats(">",_cfmt_); end; _cfmt_=left(_cfmt_); /* Nettoie les espaces */ run; proc sgplot data=mycas.sp_gt47; vbar _cfmt_ / freq=_freq_; title 'Histogramme des niveaux de SepalLength > 4.7'; run; /* Affichage des informations de fréquence maximale pour ce cas */ proc print data=mycas.card_sepal_gt47; title 'Informations de fréquence maximale pour SepalLength > 4.7'; var _varname_ _mf:; run; /* --- BLOC 4 --- */ /* Exemple 4 : Intégration Viya/CAS - Analyse de plusieurs variables et détection de cardinalité */ /* Cet exemple illustre l'exécution en mémoire distribuée (CAS) */ proc cardinality data=mycas.iris outcard=mycas.multi_var_card maxlevels=10; var SepalLength SepalWidth PetalLength PetalWidth Species; output out=mycas.high_card_vars minratio=0.8; /* Garde les variables dont la cardinalité dépasse 80% des observations */ run; proc print data=mycas.multi_var_card; title 'Cardinalité pour plusieurs variables'; run; proc print data=mycas.high_card_vars; title 'Variables avec une cardinalité supérieure à 80% des observations'; run;