Documentation Example 1 for Template Modification
/****************************************************************/
/* S A S S A M P L E L I B R A R Y */
/* */
/* NAME: TEMPLT */
/* TITLE: Documentation Example 1 for Template Modification */
/* PRODUCT: STAT */
/* SYSTEM: ALL */
/* KEYS: graphics, ods */
/* PROCS: */
/* DATA: */
/* */
/* SUPPORT: saswfk UPDATE: July 25, 2011 */
/* REF: ods graphics */
/* MISC: */
/* NOTES: This sample provides the DATA step and PROC code */
/* from the chapter "ODS Graphics Template Modification." It */
/* does not provide most of the ODS statements and style */
/* changes that are in the chapter. Rather, this sample */
/* provides code that can be run in one large batch to make */
/* all of the graphs in the chapter. If destinations were */
/* repeatedly opened and closed, as in the chapter, then */
/* output would be lost and rewritten. Note that you should */
/* not specify destination style changes without first */
/* closing a destination. Changing the style of the output */
/* without first closing the destination will not work */
/* as you might expect. Do not do the following: */
/* */
/* ODS HTML STYLE=STATISTICAL; */
/* . . . code . . . */
/* ODS HTML STYLE=DEFAULT; */
/* . . . code . . . */
/* ODS HTML STYLE=ANALYSIS; */
/* . . . code . . . */
/* */
/* Instead, do the following: */
/* */
/* ODS HTML STYLE=STATISTICAL; */
/* . . . code . . . */
/* ODS HTML CLOSE; */
/* ODS HTML STYLE=DEFAULT; */
/* . . . code . . . */
/* ODS HTML CLOSE; */
/* ODS HTML STYLE=ANALYSIS; */
/* . . . code . . . */
/* ODS HTML CLOSE; */
/* */
/* Note that several steps are commented out in this sample, */
/* because they create large volumes of output. To run those */
/* steps, remove the comments. */
/****************************************************************/
data stack;
input x1 x2 x3 y @@;
datalines;
80 27 89 42 80 27 88 37 75 25 90 37
62 24 87 28 62 22 87 18 62 23 87 18
62 24 93 19 62 24 93 20 58 23 87 15
58 18 80 14 58 18 89 14 58 17 88 13
58 18 82 11 58 19 93 12 50 18 89 8
50 18 86 7 50 19 72 8 50 19 79 8
50 20 80 9 56 20 82 15 70 20 91 15
;
ods trace on;
ods graphics on;
proc robustreg data=stack plots=qqplot;
ods select QQPlot;
model y = x1 x2 x3;
run;
ods trace off;
proc template;
source Stat.Robustreg.Graphics.QQPlot;
run;
proc template;
define statgraph Stat.Robustreg.Graphics.QQPlot;
notes "Q-Q Plot for Standardized Robust Residuals";
dynamic _DEPLABEL Residual;
BeginGraph;
ENTRYTITLE "Q-Q Plot of Residuals for " _DEPLABEL;
layout Overlay / yaxisopts=(label="Standardized Robust Residual")
xaxisopts=(label="Quantile");
SCATTERPLOT y=eval (SORT(DROPMISSING(RESIDUAL))) x=eval (
PROBIT((NUMERATE(SORT(DROPMISSING(RESIDUAL))) -0.375)/(0.25
+ N(RESIDUAL)))) / primary=true markerattrs=GRAPHDATADEFAULT
rolename=(q=eval (
PROBIT((NUMERATE(SORT(DROPMISSING(RESIDUAL))) -0.375)/(0.25
+ N(RESIDUAL)))) s=eval (SORT(DROPMISSING(RESIDUAL))))
tip=(q s) tiplabel=(q="Quantile" s="Residual");
lineparm slope=eval (STDDEV(RESIDUAL)) Y=eval (MEAN(RESIDUAL))
X=0 / lineattrs=GRAPHREFERENCE extend=true;
EndLayout;
EndGraph;
end;
run;
proc template;
define statgraph Stat.Robustreg.Graphics.QQPlot;
notes "Q-Q Plot for Standardized Robust Residuals";
dynamic _DEPLABEL Residual;
BeginGraph;
entrytitle "Analysis of Residuals";
layout Overlay /
yaxisopts=(label=("Standardized Robust Residual for " _DEPLABEL))
xaxisopts=(label="Quantile");
SCATTERPLOT y=eval (SORT(DROPMISSING(RESIDUAL))) x=eval (
PROBIT((NUMERATE(SORT(DROPMISSING(RESIDUAL))) -0.375)/(0.25
+ N(RESIDUAL)))) / primary=true markerattrs=GRAPHDATADEFAULT
rolename=(q=eval (
PROBIT((NUMERATE(SORT(DROPMISSING(RESIDUAL))) -0.375)/(0.25
+ N(RESIDUAL)))) s=eval (SORT(DROPMISSING(RESIDUAL))))
tip=(q s) tiplabel=(q="Quantile" s="Residual");
lineparm slope=eval (STDDEV(RESIDUAL)) Y=eval (MEAN(RESIDUAL))
X=0 / lineattrs=GRAPHREFERENCE extend=true;
EndLayout;
EndGraph;
end;
run;
proc robustreg data=stack plots=qqplot;
ods select QQPlot;
model y = x1 x2 x3;
run;
proc template;
delete Stat.Robustreg.Graphics.QQPlot / store=sasuser.templat;
run;
proc template;
define statgraph Stat.Robustreg.Graphics.QQPlot;
notes "Q-Q Plot for Standardized Robust Residuals";
dynamic _DEPLABEL Residual;
BeginGraph;
entrytitle "Analysis of Residuals";
layout Overlay /
yaxisopts=(label=("Standardized Robust Residual for " _DEPLABEL))
xaxisopts=(label="Quantile");
SCATTERPLOT y=eval (SORT(DROPMISSING(RESIDUAL))) x=eval(
PROBIT((NUMERATE(SORT(DROPMISSING(RESIDUAL))) -0.375)/(0.25
+ N(RESIDUAL)))) / primary=true
markerattrs=GraphDataDefault(symbol=CircleFilled)
rolename=(q=eval (
PROBIT((NUMERATE(SORT(DROPMISSING(RESIDUAL))) -0.375)/(0.25
+ N(RESIDUAL)))) s=eval (SORT(DROPMISSING(RESIDUAL))))
tip=(q s) tiplabel=(q="Quantile" s="Residual");
lineparm slope=eval (STDDEV(RESIDUAL)) Y=eval (MEAN(RESIDUAL))
X=0 / lineattrs=GraphReference(color=red pattern=dash)
extend=true;
EndLayout;
EndGraph;
end;
run;
proc robustreg data=stack plots=qqplot;
ods select QQPlot;
model y = x1 x2 x3;
run;
proc template;
define statgraph Stat.Robustreg.Graphics.QQPlot;
notes "Q-Q Plot for Standardized Robust Residuals";
dynamic _DEPLABEL Residual;
BeginGraph;
entrytitle "Analysis of Residuals";
layout Overlay / yaxisopts=(gridDisplay=Auto_On
linearopts=(tickvaluelist=(-4 -3 -2 -1 0 1 2))
label=("Standardized Robust Residual for " _DEPLABEL))
xaxisopts=(gridDisplay=Auto_On label="Quantile");
SCATTERPLOT y=eval (SORT(DROPMISSING(RESIDUAL))) x=eval(
PROBIT((NUMERATE(SORT(DROPMISSING(RESIDUAL))) -0.375)/(0.25
+ N(RESIDUAL)))) / primary=true
markerattrs=GraphDataDefault(symbol=CircleFilled)
rolename=(q=eval (
PROBIT((NUMERATE(SORT(DROPMISSING(RESIDUAL))) -0.375)/(0.25
+ N(RESIDUAL)))) s=eval (SORT(DROPMISSING(RESIDUAL))))
tip=(q s) tiplabel=(q="Quantile" s="Residual");
lineparm slope=eval (STDDEV(RESIDUAL)) Y=eval (MEAN(RESIDUAL))
X=0 / lineattrs=GraphReference(color=red pattern=dash)
extend=true;
EndLayout;
EndGraph;
end;
run;
proc robustreg data=stack plots=qqplot;
ods select QQPlot;
model y = x1 x2 x3;
run;
proc template;
delete Stat.Robustreg.Graphics.QQPlot / store=sasuser.templat;
run;
/*
proc template;
source Styles.HTMLBlue;
source Styles.Statistical;
source Styles.Default;
run;
*/
proc template;
define style Styles.MyGrids;
parent=styles.HTMLBlue;
class GraphGridLines /
displayopts = "on"
linethickness = 1px
linestyle = 1
contrastcolor = GraphColors('ggrid')
color = GraphColors('ggrid');
end;
run;
/*
ods graphics on;
ods listing style=mygrids;
*/
proc robustreg data=stack plots=qqplot;
ods select QQPlot;
model y = x1 x2 x3;
run;