Le langage GTL (Graph Template Language) représente le summum de la personnalisation graphique sous SAS, surpassant les capacités de la procédure SGPLOT dès qu'il s'agit de structures complexes. Ce script illustre parfaitement la puissance de l'instruction LAYOUT LATTICE, qui permet de partitionner l'espace graphique en cellules hétérogènes. Ici, l'expert combine un nuage de points occupant 60 % de la largeur avec une pile verticale de deux graphiques (barres et boîtes à moustaches) à droite. Cette approche est indispensable pour créer des tableaux de bord scientifiques où l'on souhaite corréler visuellement différentes dimensions d'un même jeu de données, comme les facteurs de risque cardiovasculaire de la table SASHELP.HEART.
Type : SASHELP
Les données proviennent de la table standard SASHELP.HEART. Une étape DATA est utilisée pour recoder certaines valeurs de la variable 'deathcause' (CVD, CHD) pour une meilleure lisibilité graphique.
| 1 | %let gpath='.'; /*--Put your Folder Name here--*/ |
| 2 | %let dpi=300; |
| 3 | ods listing style=listing image_dpi=&dpi gpath=&gpath; |
| 4 | ods html close; |
| 1 | PROC TEMPLATE; |
| 2 | define statgraph Fig_7_0_Panel; |
| 3 | begingraph; |
| 4 | entrytitle "Characteristics of Subjects in the Study"; |
| 5 | layout lattice / columns=2 columnweights=(0.6 0.4) columngutter=10px; |
| 6 | sidebar / spacefill=false; |
| 7 | discretelegend 'a'; |
| 8 | endsidebar; |
| 9 | layout overlay; |
| 10 | scatterplot x=cholesterol y=systolic / group=sex name='a' |
| 11 | markerattrs=(symbol=circlefilled) datatransparency=0.5; |
| 12 | endlayout; |
| 13 | layout lattice / rows=2 columndatarange=union; |
| 14 | columnaxes; |
| 15 | columnaxis / discreteopts=(tickvaluefitpolicy=stagger) tickvalueattrs=(size=6); |
| 16 | endcolumnaxes; |
| 17 | layout overlay / yaxisopts=(labelattrs=(size=8) tickvalueattrs=(size=6) |
| 18 | label='Weight(mean)' offsetmin=0) |
| 19 | xaxisopts=(labelattrs=(size=8) tickvalueattrs=(size=6)); |
| 20 | barchart x=deathcause y=weight / group=sex groupdisplay=cluster stat=mean |
| 21 | baselineattrs=(thickness=0) fillattrs=(transparency=0.2) outlineattrs=(color=black); |
| 22 | endlayout; |
| 23 | layout overlay / yaxisopts=(labelattrs=(size=8) tickvalueattrs=(size=6)) |
| 24 | xaxisopts=(labelattrs=(size=8) tickvalueattrs=(size=6)); |
| 25 | boxplot y=diastolic x=deathcause / group=sex groupdisplay=cluster |
| 26 | fillattrs=(transparency=0.2) meanattrs=(size=5 color=black) outlineattrs=(color=black); |
| 27 | endlayout; |
| 28 | endlayout; |
| 29 | endlayout; |
| 30 | endgraph; |
| 31 | END; |
| 32 | RUN; |
| 1 | DATA heart; |
| 2 | SET sashelp.heart(keep=Cholesterol Systolic Diastolic Deathcause Sex Weight); |
| 3 | IF deathcause="Cerebral Vascular Disease" THEN deathcause="CVD"; |
| 4 | ELSE IF deathcause="Coronary Heart Disease" THEN deathcause="CHD"; |
| 5 | ELSE deathcause=deathcause; |
| 6 | RUN; |
| 1 | ods listing; |
| 2 | ods graphics / reset width=6in height=2.4in imagename="7_0_Panel_V93"; |
| 3 | PROC SGRENDER DATA=heart template=Fig_7_0_Panel; |
| 4 | RUN; |
| 5 | |
| 6 | title; |
| 7 | footnote; |