
Combien de contrats ai-je au total ? (5/5) PROC TABULATE
novembre 24, 2008Ce dernier article de notre série sur le calcul d’un total par variable (contrat) sous SAS aborde la procédure PROC TABULATE. Comme précédemment, les résultats sont redirigés vers un data set.
1. Rappel
La source de la thématique : Cette série d’articles est basée sur une question posée sur le forum de http://www.commentcamarche.net : vous pouvez retrouver la question d’origine sur leur site.
Les autres articles : Vous pouvez retrouver les précédents articles de la série ici :
Les données :Les données sont sauvegardées dans un data set nommé CONTRATS. Il contient 4 variables :
- l’identifiant de chaque client CLIENT,
- le nombre de contrats NB_CNTR et
- deux variables binaires TEL et HABITAT indiquant si oui ou non les fréquences s’appliquent.
Au total, on compte 9 contrats téléphoniques et 5 contrats d’habitation.
Créer le data set CONTRATS
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;
2. La réponse de PROC TABULATE
Lister les variables dans l’instruction VAR : Dans un premier temps les variables binaires TEL et HABITAT sont listées. Là encore il faut préciser le poids de chaque valeur. L’option WEIGHT introduit la variable NB_CONTR, notre coefficient multiplicateur.
Exprimer le calcul requis dans l’instruction TABLE : Pour chacune des variables TEL et HABITAT, la somme est faite en tenant compte du coefficient. Les résultats sont des nombres entiers mais SAS ajoute par défaut des chiffres après la virgule (des zéros donc ici). Pour s’en débarasser, un format 5. est appliqué aux sommes. La sonne ne devra donc pas être un nombre avec plus de 5 chiffres.
Empêcher l’affichage dans la fenêtre OUTPUT : La sortie générée par PROC TABULATE s’appelle TABLE. Par défaut, le résultat est envoyé dans la fenêtre OUTPUT. Pour empêcher cette redirection le temps du PROC TABULATE, les options ODS EXCLUDE doivent être activées.
Rediriger ses résultats dans un data set avec l’ODS (Output Delivery System) : Le data set contenant les résultats s’appelle SOLUTION5. Il est créé avec l’instruction ODS OUTPUT.
*ods exclude table; proc tabulate data=contrats;*out=solution5; var tel habitat / weight=nb_cntr; table tel habitat, (sum='Frequency')*f=5.; ods output table=solution5; run; *ods exclude none;
L’ancienne méthode pour créer un data set, l’option OUT= : L’ancienne méthodeconsiste à ajouter l’option OUT= dans l’instruction PROC TABULATE. Mais cette syntaxe n’est pas généralisable à toutes les procédures et est donc plus difficile à se souvenir pour des utilisations occasionnelles.
3. Améliorer le fichier de sortie
Un simple PROC PRINT sur le fichier SOLUTION5 montre que
_TYPE_ _PAGE_ _TABLE_ tel_Sum habitat_Sum 0 1 1 9 5
Pour changer l’orientation des résultats, vous pouvez faire appel à un PROC TRANSPOSE.
proc transpose data=solution5 out=solution5 (drop=_LABEL_); var tel_sum habitat_sum; run;
Reste à vous d’améliorer la présentation avec des RENAME, LABEL appropriés, etc.
_NAME_ COL1 tel_Sum 9 habitat_Sum 5
Votre commentaire