Vous n'êtes pas identifié.
Bienvenue sur le site support de mes ouvrages d'introduction à SAS
La 4ème édition de mon ouvrage est disponible depuis le 11 avril 2019 !
Bonjour
PROC REPORT est une procédure que pas mal d'utilisateurs de SAS n'aiment pas... c'est vrai qu'elle est un peu étrange et qu'il faut bien comprendre comment elle fonctionne si l'on veut produire des choses intéressantes...
Chez SAS, ils ont dû pleinement intégrer l'étrangeté de cette procédure puisque ça ne les dérange pas de mettre dans l'aide un résultat très intrigant... (et je remercie au passage Julie qui m'a contacté pour me montrer cet étrange résultat...)
Voyez cet exemple donné dans l'aide :
http://support.sas.com/documentation/cd … 9ngxmv.htm
vous allez me dire "ce programme est infernal"
c'est surtout le résultat qui est étrange :
Regardez la colonne PROFIT du premier tableau : 168 + 47.5 + 36 + 21.5 = 196.5 ??????????
non, 168 + 47.5 + 36 + 21.5 = 273 (et il y a aussi une erreur dans le second tableau...)
L'objet de ce sujet des beaux mercredis sera, in fine, de trouver le bon résultat... ça risque d'être un peu long parce, même dans des cas plus simples, ce qui apparaît en somme peut ne pas être correct...
Voici le programme qui permet de construire la table GROCERY utilisée par cet exemple :
data grocery; input Sector $ Manager $ Department $ Sales @@; datalines; se 1 np1 50 se 1 p1 100 se 1 np2 120 se 1 p2 80 se 2 np1 40 se 2 p1 300 se 2 np2 220 se 2 p2 70 nw 3 np1 60 nw 3 p1 600 nw 3 np2 420 nw 3 p2 30 nw 4 np1 45 nw 4 p1 250 nw 4 np2 230 nw 4 p2 73 nw 9 np1 45 nw 9 p1 205 nw 9 np2 420 nw 9 p2 76 sw 5 np1 53 sw 5 p1 130 sw 5 np2 120 sw 5 p2 50 sw 6 np1 40 sw 6 p1 350 sw 6 np2 225 sw 6 p2 80 ne 7 np1 90 ne 7 p1 190 ne 7 np2 420 ne 7 p2 86 ne 8 np1 200 ne 8 p1 300 ne 8 np2 420 ne 8 p2 125 ; proc format ; value $sctrfmt 'se' = 'Southeast' 'ne' = 'Northeast' 'nw' = 'Northwest' 'sw' = 'Southwest'; value $mgrfmt '1' = 'Smith' '2' = 'Jones' '3' = 'Reveiz' '4' = 'Brown' '5' = 'Taylor' '6' = 'Adams' '7' = 'Alomar' '8' = 'Andrews' '9' = 'Pelfrey'; value $deptfmt 'np1' = 'Paper' 'np2' = 'Canned' 'p1' = 'Meat/Dairy' 'p2' = 'Produce'; run;
et voici un programme qui ne doit vous poser aucun problème si vous avez lu avec attention la section 6.4 (ED3) consacrée à PROC REPORT :
title 'Un rapport nettement plus gentil'; proc report data=grocery; column department sales Profit ; define department / group format=$deptfmt.; define sales / analysis sum format=dollar11.2; define profit / computed format=dollar11.2; compute profit; if department='np1' or department='np2' then profit=0.4*sales.sum; else profit=0.25*sales.sum; endcomp; Rbreak after / summarize ; run;
Bon... quand je dis que vous devez comprendre ce programme sans aucune difficulté, j'exagère un peu (mais c'était pour vous donner confiance en vous ! ). Les instructions COLUMN et DEFINE ne posent pas de difficultés mais ce que vous avez à l'intérieur du bloc COMPUTE peut vous paraître étrange :
compute profit; if department='np1' or department='np2' then profit=0.4*sales.sum; else profit=0.25*sales.sum; endcomp;
Dans les exemples de blocs COMPUTE donnés dans mon ouvrage, je ne fais que de la construction "simple" :
COMPUTE vitesse ; vitesse=3600*2.1/temps.mean; ENDCOMP;
Vous apprenez aujourd'hui déjà une chose : on peut faire de la construction conditionnelle à l'intérieur des blocs COMPUTE et la syntaxe est quasi identique à de la syntaxe propre à l'étape DATA !
Le profit est ainsi calculé : si DEPARTMENT est égal à np1 ou np2 alors le profit est égale à 40% des ventes (SALES), si ce n'est pas le cas, le produit est égal à 25% des ventes. Nous avons une variable GROUP : nos observations vont donc être regroupées par modalité de la variable DEPARTMENT, le profit, c'est donc un pourcentage de la somme des ventes (d'où SALES.SUM) enregistrées pour un certain département.
On obtient le résultat suivant :
et la somme des profits sur la dernière ligne est toujours aussi fausse alors que la somme des ventes est, elle, juste...
Donc pour la semaine prochaine, vous allez réfléchir (et déjà peut être relire la section 6.4 de mon bouquin...) afin de comprendre le résultat présenté comme la somme des profits et qui, en fait, n'y correspond pas.
Pourquoi obtient-on ce résultat ?
En passant, si PROC REPORT vous passionne, vous pourrez aussi consulter cet autre sujet des beaux mercredis
amusez vous bien
Ce sujet est maintenant archivé - seuls les utilisateurs inscrits de www.sas-sr.com peuvent consulter l'intégralité du sujet et les réponses aux questions posées.
pour vous identifier, suivez ce lien
pour vous inscrire, suivez ce lien
Hors ligne