Précédent   Forum des professionnels en informatique > Logiciels > Solutions d'entreprise > Business Intelligence > SAS > ODS et reporting
ODS et reporting Forum d'entraide sur les fonctionnalités de reporting de SAS : gérer les sorties et graphiques de SAS
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 21/11/2011, 11h00   #1
Invité régulier
 
Inscription : novembre 2011
Messages : 20
Détails du profil
Informations forums :
Inscription : novembre 2011
Messages : 20
Points : 5
Points : 5
Par défaut PROC REPORT et pourcentages en ligne

Bonjour,

Suite à ce post :
http://www.developpez.net/forums/d11...squer-colonne/

J'ai une proc report comme suit :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
 
proc format;
	value fin 	135="Etabl1"
				184="Etabl2"
				141="Etabl3"
				118="Etabl4"
				159="Etabl5"
				179="Etabl6"
				1="Total niveau 1"
				2="Total niveau 2"
				999="Total général"
				;
run;
DATA DATA;
input fin niv atcdg atcdc tab @@;
format fin fin. niv atcdg atcdc tab 1.;
datalines;
135 1 1 1 0
135 1 1 0 0
135 1 0 1 1
184 1 0 0 0
184 1 0 1 0
184 1 0 0 1
184 1 1 1 1
141 2 1 0 0
141 2 1 1 1
141 2 0 1 1
118 2 1 0 0
118 2 1 1 1
118 2 1 0 1
118 2 1 1 1
;
run;
proc report DATA=DATA nowd;
COLUMNS niv fin fin2 atcdg,(sum pctsum) atcdc,(sum pctsum) tab,(sum pctsum);
define niv / GROUP noprint descending;
define fin / GROUP NOPRINT descending;
define fin2 / COMPUTED "Etablissements" ;
define atcdg / "ATCDG";
define atcdc / "ATCDC";
define tab / "TAB";
define sum / "n" format=5.0;
define pctsum / "%" format=NLPCTN12.2;
 
break after niv / summarize;
rbreak after / summarize;
COMPUTE fin2 / LENGTH=20 ;
  SELECT (UPCASE(_break_)) ;
   WHEN ("NIV")      fin2 = PUT(niv, fin.);
   WHEN ("_RBREAK_") fin2 = PUT(999, fin.) ;
   OTHERWISE         fin2 = PUT(fin, fin.) ;
  END ;
endcomp;
run;
Elle est super mais en fait, au lieu d'avoir les pourcentages par rapport au total global, j'aurais voulu avoir les pourcentages par ligne.

J'ai donc essayé de changer PCTSUM par ROWPCTSUM mais j'obtiens ce message d'erreur :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
ERROR: Plusieurs syntaxes ANALYSIS sont associées à
       la colonne définie par les éléments suivants.
       Nom                            Syntaxe
       --------------------------------  --------
       atcdg                             ANALYSIS
       rowpctsum                         COMPUTED
ERROR: Plusieurs syntaxes ANALYSIS sont associées à
       la colonne définie par les éléments suivants.
       Nom                            Syntaxe
       --------------------------------  --------
       atcdc                             ANALYSIS
       rowpctsum                         COMPUTED
ERROR: Plusieurs syntaxes ANALYSIS sont associées à
       la colonne définie par les éléments suivants.
       Nom                            Syntaxe
       --------------------------------  --------
       tab                               ANALYSIS
       rowpctsum                         COMPUTED
Quelqu'un a une idée ??
Ludix_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2011, 12h51   #2
Membre régulier
 
Inscription : novembre 2009
Messages : 77
Détails du profil
Informations forums :
Inscription : novembre 2009
Messages : 77
Points : 74
Points : 74
C'est normal rowpctsum n'existe pas en proc report.
Le concept de "row" en proc report n'existe pas, ou en tout cas est différent de celui de proc tabulate et donner un sens à la stat rowpctsum n'est pas possible.
Ce mot n'existant pas en proc report, proc report voit cela comme le nom d'une colonne computed.
Tu dois calculer ce pct toi même, soit avant en faisant des groupes, soit dans le proc report comme:

proc report DATA=DATA nowd;
COLUMNS niv fin fin2 ('ATCDG' atcdg atcdgpctsum) ('ATCDC' atcdc atcdcpctsum) ('TAB' tab tabpctsum) dummy;
define niv / GROUP noprint descending;
define fin / GROUP NOPRINT descending;
define fin2 / COMPUTED "Etablissements" ;
define atcdgpctsum / '%' format=NLPCTN12.2;
define atcdcpctsum / '%' format=NLPCTN12.2;
define tabpctsum / '%' format=NLPCTN12.2;
define dummy / computed noprint;
compute dummy;
tot = atcdg.sum + atcdc.sum + tab.sum;
atcdgpctsum = atcdg.sum / tot;
atcdcpctsum = atcdc.sum / tot;
tabpctsum = tab.sum / tot;
endcomp;
break after niv / summarize;
rbreak after / summarize;
COMPUTE fin2 / LENGTH=20 ;
SELECT (UPCASE(_break_)) ;
WHEN ("NIV") fin2 = PUT(niv, fin.);
WHEN ("_RBREAK_") fin2 = PUT(999, fin.) ;
OTHERWISE fin2 = PUT(fin, fin.) ;
END ;
endcomp;
run;
frfancha est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 10h46.


 
 
 
 
Partenaires

Hébergement Web