/****************************************************************************** * Programme : Binning por Cuantiles (Procedimiento BINNING) * Reference : BINNINED72 * Source : https://www.wearecas.eu/en/sampleCode/BINNINED72 ******************************************************************************/ /* --- BLOC 1 --- */ /* Création d'une bibliothèque CAS pour les exemples si elle n'existe pas */ caslib _all_ assign; /* 1. Création des données en mémoire CAS */ data mylib.data_basic; call streaminit(123); /* Pour la reproductibilité */ do id=1 to 10000; x1 = rand("Uniform"); x2 = rand("Uniform") * 10; output; end; run; /* 2. Binning par quantiles */ proc binning data=mylib.data_basic numbin=10 method=quantile; input x1 x2; output out=mylib.binned_basic; run; /* 3. Affichage des détails des bins pour vérification (échantillon) */ proc print data=mylib.binned_basic (obs=20); run; /* --- BLOC 2 --- */ /* Création d'une bibliothèque CAS pour les exemples si elle n'existe pas */ caslib _all_ assign; /* 1. Création des données en mémoire CAS */ data mylib.data_inter; call streaminit(456); /* Pour la reproductibilité */ do id=1 to 15000; x1 = rand("Uniform"); x2 = rand("Normal"); /* Une autre distribution */ x3 = rand("Uniform") * 50; output; end; run; /* 2. Binning par quantiles avec options courantes */ proc binning data=mylib.data_inter numbin=5 method=quantile; input x1 x2 x3; /* Binning sur plusieurs variables */ output out=mylib.binned_inter; outbin out=mylib.bin_details_inter; /* Sauvegarde les détails des bins */ run; /* 3. Affichage des détails des bins */ proc print data=mylib.bin_details_inter; var _VARNAME_ _BINID_ _LOWER_ _UPPER_ _COUNT_; run; /* --- BLOC 3 --- */ /* Création d'une bibliothèque CAS pour les exemples si elle n'existe pas */ caslib _all_ assign; /* 1. Création des données en mémoire CAS avec un groupe */ data mylib.data_adv; call streaminit(789); /* Pour la reproductibilité */ do id=1 to 20000; if mod(id, 2)=0 then group = "A"; else group = "B"; x1 = rand("Uniform") + (group="A") * 0.5; /* x1 dépend du groupe */ x2 = rand("Normal") + (group="B") * 2; /* x2 dépend du groupe */ output; end; run; /* 2. Binning par quantiles avec BY group et statistiques de sortie */ proc binning data=mylib.data_adv numbin=4 method=quantile; by group; /* Binning effectué séparément pour chaque groupe */ input x1 x2; output out=mylib.binned_adv; outbin out=mylib.bin_stats_adv; run; /* 3. Affichage des détails des bins par groupe */ proc print data=mylib.bin_stats_adv; by group; var group _VARNAME_ _BINID_ _LOWER_ _UPPER_ _COUNT_ MEAN STD MIN MAX; run; /* --- BLOC 4 --- */ /* Création d'une bibliothèque CAS pour les exemples si elle n'existe pas */ caslib _all_ assign; /* 1. Création d'une table CAS très volumineuse */ data mylib.data_cas_large; call streaminit(101112); /* Pour la reproductibilité */ do id=1 to 5000000; /* 5 millions d'observations */ x1 = rand("Uniform"); x2 = rand("Exponential"); output; end; run; /* 2. Binning par quantiles sur la grande table CAS */ proc binning data=mylib.data_cas_large numbin=10 method=quantile; input x1 x2; output out=mylib.binned_cas_large; outbin out=mylib.bin_stats_cas_large; run; /* 3. Inspection des propriétés de la table CAS résultante */ proc casutil incaslib="mylib"; list files; /* Lister les fichiers dans la caslib pour voir les tables créées */ describe table="binned_cas_large"; /* Décrire la structure de la table binnée */ fetch casdata="binned_cas_large" to=out; /* Récupérer un échantillon pour vérification */ run; quit; /* 4. Affichage d'un échantillon de la table binnée */ proc print data=out (obs=10); run;