Posts Tagged ‘weight’

h1

Combien de contrats ai-je au total ? (5/5) PROC TABULATE

novembre 24, 2008

Ce 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
h1

Combien de contrats ai-je au total ? (3/5) PROC MEANS

novembre 10, 2008

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.