Dans nos précédents articles du lundi, nous avons vu avec PROC SQL et RETAIN deux approches pour calculer le nombre total de contrats à partir du nombre de contrats par client. Il s’agit alors de résoudre une question posée sur le forum commentcamarche.net. Les données ont qu’en à elle une structure très particulière. La procédure PROC MEANS offre une troisième réponse possible comme nous le verrons ici.
Les données : Vous trouverez en fin d’article un rappel des données.
- CLIENT : l’identifiant du client,
- NB_CNTR : le nombre de contrats,
- TEL: variable binaire (0/1) indiquant si oui ou non le nombre de contrat s’applique aux contrats téléphoniques du client
- HABITAT : variable binaire (0/1) indiquant si oui ou non le nombre de contrat s’applique aux contrats habitation du client
1. La notion de coefficient (WEIGHT)
Les coefficient au bac : Les bacheliers français se souviendront d’avoir appliqué des coefficients à leur notes pour savoir combien de points ils leur fallait pour avoir le fameux sésam du bac. Il fallatt ainsi compter 5 fois la note d’histoire-géographie si le coefficient est de 5, etc.
La même notion de coefficient concerne aussi les bases de données. Il faut compter 5 fois une observation lorsqu’un coefficient de 5 est appliqué. En effet de manière générale, les données à disposition du programmeur contient soit toutes les informations ou un résumé de ces informations.
Traduction : En anglais, on parle de weight pour désigner les coefficient. En effet, le poids de chaque observation est mesuré.
Pourquoi utiliser des coefficients : Dans le cas d’un data set contenant des informations sur les contrats de cliens, une table pourrait avoir :
- une ligne pour chaque contrat de chaque client ou
- une ligne par client et le nombre de contrats qu’il a.
Dans le second cas, il y a une perte d’information pour les autres variables du data set mais le data set est moins volumineux.
Le mot-clé WEIGHT en SAS : De son côté, SAS utilise dans plusieurs procédures statistiques (PROC MEANS, PROC FREQ, etc.) le mot WEIGHT en tant que :
- instruction,
- option dans une instruction.
2. La notion de coefficient appliquée à nos données
WEIGHT=NB_CNTR : Dans notre exemple, la variable NB_CNTR indique combien de contrats un client a. Il s’agit de la variable servant de coefficient (weight).
client nb_contr tel habitat a 5 1 0 b 1 1 0 c 2 0 1 d 1 1 0 e 3 0 1 f 2 1 0
Lister les variables concernées par le coefficient : SAS applique ce poids aux deux variables binaires TEL et HABITAT.
La variable TEL sera interprétée de la manière suivante :
client tel a 5 b 1 c 0 d 1 e 0 f 2
Et la variable HABITAT sera interprétée ainsi :
client habitat a 0 b 0 c 2 d 0 e 3 f 0
La syntaxe minimale du PROC MEANS : La procédure PROC MEANS listera dans un premier temps les variables binaires. Puis en option, désignera la variable weight afin de savoir par combien chaque valeur doit être multipliée.
proc means data=contrats sum; var tel habitat / weight=nb_cntr; run;
L’option statistique SUM : pour ne voir que la somme des contrats il faut précise la statistique SUM en option de l’instruction PROC MEANS. Sinon, seont affichés les statistiques par défaut que sont
- le nombre de contrat (N),
- le plus petit/grand nombre de contrats (MIN/MAX),
- la moyenne (MEAN) et
- l’écart type (STD).
Résultats : Les premiers résultats dans la fenêtre OUTPUT confirme qu’il y a 9 contrats téléphoniques et 5 contrats d’habitation au total.
The MEANS Procedure Variable Sum ------------------------ tel 9.0000000 habitat 5.0000000 ------------------------
2. Gérer les sorties de l’ODS
Par défaut les résultats sont redirigés vers la fenêtre OUTPUT de SAS.
Ajouter une destination avec ODS OUTPUT : Afin d’extraire le résultat dans un data set, il est possible d’ajouter une instruction ODS OUTPUT. Pour connaître le nom désignant la sortie générée par un PROC MEANS, utilisez au préalable ODS TRACE ON/LISTING et ODS TRACE OFF.
Stopper la destination OUTPUT avec ODS EXCLUDE : Si, de plus, le programmeur souhaite empêcher l’affichage de la sortie PROC MEANS dans la fenêtre OUTPUT, l’instruction ODS EXCLUDE doit être exécutée (ODS SELECT ALL annulera l’opération).
*ods trace on/listing; proc means data=contrats sum; var tel habitat / weight=nb_cntr; ods exclude summary; ods output summary=solution3; run; *ods trace off;
Une version de base des statistiques sauvegardées dans un data set : Après un PROC PRINT sur le data set nouvellement créé (SOLUTION3), la sortie se présente sous une forme différente que dans la fenêtre OUTPUT.
VName_ VName_ tel tel_Sum habitat habitat_Sum tel 9 habitat 5
Pour modifier cette présentation, il est possible d’utiliser un PROC TRANSPOSE.
proc transpose data=solution3 out=solution3 (drop=_LABEL_); var tel habitat; run;
Une version améliorée des statistiques sauvegardées dans un data set : Reste à vous le choix de renommer le nom des variables selon vos préférences.
_NAME_ COL1 tel_Sum 7 habitat_Sum 5
Annexe :
data contrats; input client $ nb_cntr tel habitat; datalines; a 5 1 0 b 1 1 0 c 2 0 1 d 1 1 0 e 3 0 1 f 2 1 0 ; run;
Plus de précisions sur la procédure PROC MEANS sont disponibles en ligne : SAS Online Doc : The MEANS Procedure.
A dans huit jours, pour une présentation de l’approche avec PROC FREQ. D’ici là je vous retrouve d’ici quelques jours pour le second article de la semaine.