Posts Tagged ‘sum’

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

J’additionne des valeurs manquantes

février 16, 2008

Calculatrice

Une simple somme de deux nombres et vous obtenez un résultat différent de vos attentes. C’est possible avec SAS lorsque des valeurs manquantes (missing et special missing) sont incluses. Je vous propose de découvrir la différence entre les opérateurs mathématiques et les fonctions de calcul au travers de la fonction SUM.

Voici la règle :
les fonctions de calcul SAS ignorent les valeurs manquantes. Ainsi avec la fonction SUM, la somme de 2 et d’une valeur manquante est 2, alors qu’il est valeur manquante avec l’opérateur + d’addition : 2 +. = .

A présent, voyons les trois notations de la fonction SUM.

1. Lister les valeurs comme autant de paramètres de la fonction SUM : les paramètres d’une fonction SAS se séparent par une virgule. Pour faire la somme de plusieurs valeurs, vous pourrez les lister les unes à la suite des autres dans les parenthèses de la fonction SUM en les séparant par une virgule :

newvar = sum(2,3,.);

Mais soyons honnête, vous aurez plus souvent l’occasion de faire référence aux valeurs par de l’intermédiaire de variables qu’en listant des données brutes :

newvar = sum(x,y,z);

2. Le mot-clé OF pour lister les valeurs à additionner sans virgule : pour lister sans virgule les données à additionner dans la fonction SUM, il faut absolument ajoutez le mot-clé OF :

newvar = sum (of 2 3 .) ;

newvar = sum(of test2 test3 test4);

3. Le mot-clé OF c’est aussi un moyen de lister de nombreuses variables au nom proche : dans l’exemple précédent, les variables portent des noms ayant une base commune et un nombre entier toujours incrémenté de 1. En définissant un intervalle listant les première et dernière variables séparées par un trait d’union, vous vous épargnerez un travail qui devient vite fastidieux avec un nombre de variables qui augmente.

newvar = sum(of test2-test4);

Cette notation n’est pas propre à la fonction SUM. Elle s’applique dans de nombreux contextes : une option KEEP, DROP, un ARRAY, etc.

Important :
notez ici l’importance de ne pas oublier le mot-clé OF. Dans l’exemple précédent, SAS soustrairait la variable test4 à la variable test2 si le mot-clé OF n’apparaissait pas. La fonction SUM n’aurait alors qu’une valeur.

Autres lectures : les fonctions MIN et MAX et leur corollaires >< et <> fonctionnent sur le même principe que la fonction SUM et l’opérateur + lorsqu’ils traitent des valeurs manquantes.