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 13/12/2010, 16h51   #1
Invité régulier
 
Astrid Genet
Inscription : novembre 2010
Messages : 43
Détails du profil
Informations personnelles :
Nom : Astrid Genet

Informations forums :
Inscription : novembre 2010
Messages : 43
Points : 7
Points : 7
Par défaut Sortir plusieurs graphs SAS sur une même page

Bonjour,

J'utilise beaucoup la Proc Gplot mais je n'ai jamais eu besoin d'exporter les graphs.

Est-ce que quelqu'un aurait:
1- Un bout de code adapté pour exporter un graph en .png
2- Une idée du code pour exporter plusieurs graphs sur une même page.

Par exemple, avec le code suivant je produis autant de graphs que j'ai d'individus dans mon jeu de données (ici des arbres) et pour une analyse rapide des corrélations je souhaiterai les sortir tous sur une page en format .png.

Code :
1
2
3
4
proc gplot DATA= Db_cr_analyse;
	BY Station Individu;
	plot LargLW * Prev_LargLW / VAXIS=AXIS1 HAXIS=AXIS2;
run;
Mais je ne trouve pas le syntaxe pour le faire et sur l'aide ou en ligne, je n'ai pas trouvé de réponse à ma question.

Merci!

Astrid
AstridG est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2010, 22h38   #2
Rédacteur
 
Homme Stéphane
Consultant et formateur SAS et Cognos
Inscription : avril 2009
Messages : 1 791
Détails du profil
Informations personnelles :
Nom : Homme Stéphane
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Consultant et formateur SAS et Cognos
Secteur : Conseil

Informations forums :
Inscription : avril 2009
Messages : 1 791
Points : 4 012
Points : 4 012
tu es en 9.1 ou 9.2 ?
__________________
N'oubliez pas de cliquer sur lorsque votre problème est réglé !

Moteur de recherche dans les papiers SAS
datametric est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2010, 11h25   #3
Membre expérimenté
 
Inscription : avril 2009
Messages : 537
Détails du profil
Informations forums :
Inscription : avril 2009
Messages : 537
Points : 540
Points : 540
regarde dans ce forum avec le mot clé gsfname
xav2229 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2010, 14h31   #4
Invité régulier
 
Astrid Genet
Inscription : novembre 2010
Messages : 43
Détails du profil
Informations personnelles :
Nom : Astrid Genet

Informations forums :
Inscription : novembre 2010
Messages : 43
Points : 7
Points : 7
Bonjour Datametric,

Je suis en 9.2.

L'ods rtf file me permet de sortir tous mes graphs sur un doc Word mais je dois manquer une subtilité de paramétrage qui me permettrait par exemple de pourvoir mettre 5 ou 10 petits graphs par page, pour avoir un aperçu rapide de la tête des corrélations.

Je sais qu'il y a beaucoup de possibilités avec l'ods (sortir en paysage, formatter les titres, etc.) donc cette fonctionnalité doit bien exister.

Merci!

Astrid
AstridG est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2010, 16h23   #5
Membre Expert
 
Homme
Biostatisticien
Inscription : juin 2009
Messages : 1 143
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Irlande

Informations professionnelles :
Activité : Biostatisticien
Secteur : Industrie Pharmaceutique

Informations forums :
Inscription : juin 2009
Messages : 1 143
Points : 1 760
Points : 1 760
Une solution consiste à coupler l'otion startpage=never à des options graphiques
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
ods rtf file="c:\test_RTF.RTF"  STARTPAGE=NEVER;
goptions reset   = goptions 
         device  = PNG
target  = PNG 
xmax    = 3 IN 
ymax    = 3 IN 
ftext   = 'Arial' 
ftitle  = 'Arial/bo';
 
proc gplot DATA=sashelp.bweight; 
plot weight*married;
run; quit;
proc gplot DATA=sashelp.bweight; 
 
plot weight*boy;
run; quit;
proc gplot DATA=sashelp.bweight; 
plot weight*mom_age;
run; quit;
 
ods rtf close;
Manoutz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2010, 16h56   #6
Invité régulier
 
Astrid Genet
Inscription : novembre 2010
Messages : 43
Détails du profil
Informations personnelles :
Nom : Astrid Genet

Informations forums :
Inscription : novembre 2010
Messages : 43
Points : 7
Points : 7
Bonjour et merci Manoutz!

Ta solution marche bien et j'ai en effet 3 graphs l'un en dessous de l'autre dans mon document Word en sortie.

Mais si je peux me permettre, j'ajouterai bien une question. Il reste avec cette solution de la place perdue, est-ce qu'il serait donc possible d'avoir 4 graphs par page, 2 superposés à droite et deux superposés à gauche (faire deux colonnes de deux graphs en somme)? Est-ce bricolable?
Dans ce cas là j'utiliserait l'option landscape pour avoir ma feuille en format paysage en sortie.

Merci beaucoup!

Astrid
AstridG est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2010, 17h12   #7
Membre Expert
 
Homme
Biostatisticien
Inscription : juin 2009
Messages : 1 143
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Irlande

Informations professionnelles :
Activité : Biostatisticien
Secteur : Industrie Pharmaceutique

Informations forums :
Inscription : juin 2009
Messages : 1 143
Points : 1 760
Points : 1 760
ton bonheur est sur

http://www2.sas.com/proceedings/sugi28/094-28.pdf
Manoutz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2010, 17h52   #8
Invité régulier
 
Astrid Genet
Inscription : novembre 2010
Messages : 43
Détails du profil
Informations personnelles :
Nom : Astrid Genet

Informations forums :
Inscription : novembre 2010
Messages : 43
Points : 7
Points : 7
Merci Manoutz!

L'idée est très bonne mais ne correspond cependant pas bien à mon souci. Je produis des graphs en grande quantité avec des statement by, donc la solution proposée où on affecte chaque graph à une place précise ne convient pas à mon problème.

Ce que je recherchais n'est sans dioute pas faisable sous SAS.

Astrid
AstridG est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2010, 17h56   #9
Membre Expert
 
Homme
Biostatisticien
Inscription : juin 2009
Messages : 1 143
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Irlande

Informations professionnelles :
Activité : Biostatisticien
Secteur : Industrie Pharmaceutique

Informations forums :
Inscription : juin 2009
Messages : 1 143
Points : 1 760
Points : 1 760
C'est pas nécéssairement un problème je pense. Tant que tu trouves un moyen de gérer tes name=
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
proc gplot DATA=sashelp.bweight GOUT = work.graphiques ; 
plot weight*married/name="graph1" ; 
plot weight*boy/name="graph2";
plot weight*mom_age/name="graph3";
run; quit;
 
ods rtf file="c:\test_RTF.RTF"  STARTPAGE=NEVER; 
title "test de titre";
PROC GREPLAY NOFS TC = sashelp.templt
IGOUT = work.graphiques;
TEMPLATE = l2r2 ;
TREPLAY 1: graph1
		2: graph2
		3: graph3 ;
RUN ; QUIT ;
ods rtf close;
Manoutz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2010, 18h26   #10
Invité régulier
 
Astrid Genet
Inscription : novembre 2010
Messages : 43
Détails du profil
Informations personnelles :
Nom : Astrid Genet

Informations forums :
Inscription : novembre 2010
Messages : 43
Points : 7
Points : 7
La gestion des titres n'est pas un problème en utilisant "title "#byval(variable)";".
Mais alors je n'arrive absolument pas à faire ces 4 graphs par page. En utilisant le template l2r2 c'est comme si il n'y avait rien: j'ai un graph par page. Ca vient sans doute du fait que je ne peux pas utiliser le Treplay puisque ce serait trop fastidieux de placer les grpahs un à un. Mon option "by station" me génère 10 graphs d'affilée (cf. code en dessous). Il faudrait que sas les mette arbitrairement à la suite l'un de l'autre selon la logique qui lui convient.

Je vous mets mon code, des fois qu'une erreur vous saute aux yeux.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
ods _all_ close;
ods rtf file='\\tsclient\C\PostDoc\Densito\Analyse\SortiesSAS\Graphs\LargCerne_DensMoyCerne.rtf' style=minimal startpage= never;
 
PROC GREPLAY NOFS TC = sashelp.templt
TEMPLATE= l2r2;
run;
 
title1 j=l "LargCerne= f(DensMoyCerne)" " - " "#byval(station)";
proc gplot DATA= Db_cr_analyse;
	BY Station;
	plot LargCerne * DensMoyCerne / VAXIS=AXIS1 HAXIS=AXIS2;
run;
quit;
 
title1 j=l "LargCerne= f(DensMoyEW)" " - " "#byval(station)";
proc gplot DATA= Db_cr_analyse;
	BY Station;
	plot LargCerne * DensMoyEW / VAXIS=AXIS1 HAXIS=AXIS2;
run;
quit;
ods rtf close;
Merci!

Astrid
AstridG est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2010, 18h41   #11
Membre Expert
 
Homme
Biostatisticien
Inscription : juin 2009
Messages : 1 143
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Irlande

Informations professionnelles :
Activité : Biostatisticien
Secteur : Industrie Pharmaceutique

Informations forums :
Inscription : juin 2009
Messages : 1 143
Points : 1 760
Points : 1 760
regarde bien ma syntaxe. la greplay interient à la fin et il faut que tu utilises les options gout et igout. Après pour le by, à toi de voir si tu peux t'en sortir avec le name=, en passant par le #byval par exemple.

ca me semble compliqué de gérer dynamiquement la greplay (tu veux 4 graphs par pages c'est ca?)
Manoutz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2010, 18h49   #12
Invité régulier
 
Astrid Genet
Inscription : novembre 2010
Messages : 43
Détails du profil
Informations personnelles :
Nom : Astrid Genet

Informations forums :
Inscription : novembre 2010
Messages : 43
Points : 7
Points : 7
J'arrive à rien en effet, il faudrait que je donne les noms un à un. Il y a forcément une solution, mais je ne la trouve pas.

Merci en tout cas pour ton intervention, au moins j'ai 3 graphs par page!

Astrid
AstridG est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2010, 19h17   #13
Membre Expert
 
Homme
Biostatisticien
Inscription : juin 2009
Messages : 1 143
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Irlande

Informations professionnelles :
Activité : Biostatisticien
Secteur : Industrie Pharmaceutique

Informations forums :
Inscription : juin 2009
Messages : 1 143
Points : 1 760
Points : 1 760
si ca marche avec la modif au dessus
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
 
DATA temp;
SET  sashelp.bweight;
IF _n_<1000 then GROUP="g1";
else IF _n_<2000 then GROUP="g2";
else GROUP="g3";
run;
proc gplot DATA=temp GOUT = work.graphiques ; 
plot weight*married/name="#byval(group)" ; 
BY GROUP;
run; quit;
 
ods rtf file="c:\test_RTF.RTF"  STARTPAGE=NEVER; 
title "test de titre";
PROC GREPLAY NOFS TC = sashelp.templt
IGOUT = work.graphiques;
TEMPLATE = l2r2 ;
TREPLAY 1: g1
		2: g2
		3: g3 ;
RUN ; QUIT ;
ods rtf close;
Manoutz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2010, 21h00   #14
Invité régulier
 
Astrid Genet
Inscription : novembre 2010
Messages : 43
Détails du profil
Informations personnelles :
Nom : Astrid Genet

Informations forums :
Inscription : novembre 2010
Messages : 43
Points : 7
Points : 7
Salut Manoutz,

Pour moi c'est toujours sans succès, mais j'avoue ne pas comprendre comment la proc data en entrée définit les 3 groupes. SOnt-ils basés sur le nombre total de mesures dans la table? Si c'est la cas il y a un problème car on utilise un groupe by. J'ai toujours dans la log:

Code :
1
2
3
4
5
6
"498  TREPLAY 1: g1
499          2: g2
500          3: g3;
NOTE: Graph, G1, is not on the igout catalog.
NOTE: Graph, G2, is not on the igout catalog.
NOTE: Graph, G3, is not on the igout catalog."
Je fais certainement une erreure due au fait que je comprends mal ce que j'utilise. Je mets tout de même mon code:


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
DATA temp;
SET  Db_cr_analyse;
IF _n_<2 then GROUP="g1";
else IF _n_<4 then GROUP="g2";
else GROUP="g3";
run;
proc gplot DATA= temp GOUT = work.gseg
	BY Station;
	plot DensMoyCerne * LargCerne / VAXIS=AXIS1 HAXIS=AXIS2 name= "#byval(station)";
run;
proc gplot DATA= temp GOUT = work.gseg;
	BY Station;
	plot DensMoyEW * LargCerne / VAXIS=AXIS1 HAXIS=AXIS2  name= "#byval(station)";
run;
quit;
ods rtf file='\\tsclient\C\PostDoc\Densito\Analyse\SortiesSAS\Graphs\TousEffetsArbre_ByStation.rtf' startpage= never;
 
PROC GREPLAY NOFS TC = sashelp.templt
IGOUT = work.gseg
TEMPLATE = l2r2 ;
TREPLAY 1: g1
		2: g2
		3: g3;
RUN ; QUIT ;
ods rtf close;
Merci!

Astrid
AstridG est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2010, 10h17   #15
Membre Expert
 
Homme
Biostatisticien
Inscription : juin 2009
Messages : 1 143
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Irlande

Informations professionnelles :
Activité : Biostatisticien
Secteur : Industrie Pharmaceutique

Informations forums :
Inscription : juin 2009
Messages : 1 143
Points : 1 760
Points : 1 760
tu n'as pas besoin de la première étape data (et non proc data!). je l'ai créé pour avoir des données et une variable de groupe accessible a tout le monde. Si tu lances mon code ca te permettra peut etre de voir ce qui ne va pas et de comprendre le message d'erreur. Essaye de comprendre la relation entre les options name= et treplay.
Manoutz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2010, 14h13   #16
Invité régulier
 
Astrid Genet
Inscription : novembre 2010
Messages : 43
Détails du profil
Informations personnelles :
Nom : Astrid Genet

Informations forums :
Inscription : novembre 2010
Messages : 43
Points : 7
Points : 7
Salut Manoutz,

J'ai mieux compris le principe, mais je ne trouve pas de correspondance car dans mon cas j'ai 2 "Stations" (mes groupes), et plusieurs graphs pour chaque station. Du coup dans le Treplay, je ne sais pas quoi mettre en g3 et g4. Mais même en mettant le nom de mes stations (Hemmingford et Saint-Anicet) en g1 et g2, j'ai toujours le même message d'erreur disant que mes stations ne sont pas dans le igout catalog:
Code :
1
2
"Graph, HEMMINGF, is not on the igout catalog.
NOTE: Graph, SAINT-AN, is not on the igout catalog."
Astrid
AstridG est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2010, 14h23   #17
Membre Expert
 
Homme
Biostatisticien
Inscription : juin 2009
Messages : 1 143
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Irlande

Informations professionnelles :
Activité : Biostatisticien
Secteur : Industrie Pharmaceutique

Informations forums :
Inscription : juin 2009
Messages : 1 143
Points : 1 760
Points : 1 760
L'aide en ligne indique que les noms dans le t-replay est limité à une chaine de 8 caratères max. Y a-t-il moyen de renommer tes groupes en entrée?

Pour tes deux stations essaye pas à pas en commencant par une seule gplot
Manoutz est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h24.


 
 
 
 
Partenaires

Hébergement Web