- 非常感谢bobguy和ziyenano两位高手的指导。特别bobguy一直以来给了我很大的帮助。
复制代码在这个bar-line例子中,我认为两位高手的代码还存在一点点瑕疵。其中
bobguy 的图形能实现柱状图左右分开,趋势线上下叠加,但是无法实现良率用线图,数量用柱图。(反过来实现的话,良率就必须放在右轴,而不是左轴)
而
ziyenano 的图形是柱图和线图的点都是左右分开,而不是线图上下叠加。
上面代码是我认真学习帮助文档后的成绩,能完美实现要求的图形。不仅如此,也是定制作图的一般步骤。
第一步是恢复SAS默认模板。
第二步是定义一个公共模板,主要控制图形输出外观相关,例如用group=选项的时候,控制线条颜色。
第三步是定义一个画图模板,主要是定义生成什么图形,需要什么要素以及如何摆放。
第四步就是用上面定义好的模板画图。
但是,关于如何画趋势散点图的另外一个例子,目前我还没想到好办法,请各位继续指导,谢谢!
/*******************************************************************************************/
data test;
input Week $ UP_DOWN $ Yield Input;
datalines;
wk01 U 0.75 5452
wk01 D 0.67958 4519
wk02 U 0.74241 4313
wk02 D 0.83931 3765
wk03 D 0.84109 22843
wk05 D 0.79949 2339
wk06 U 0.62222 225
wk09 U 0.85874 2230
wk09 D 0.82832 6215
wk10 U 0.68742 7387
wk10 D 0.80633 8184
wk11 U 0.77253 12182
wk11 D 0.79991 10615
wk12 U 0.75884 13157
wk12 D 0.80153 4842
wk13 U 0.75761 3911
wk13 D 0.84413 1219
wk14 U 0.70016 2538
;
run;
/*******************************************************************************************/
%let _color=blue red green orange purple darkgrey
lightvividblue lightvividred lightvividgreen darkyellow violet brown;
%let _marker=circle circle circle circle circle circle
circle circle circle circle circle circle;
%let _line=1 1 1 1 1 1 1 1 1 1 1 1;
%macro colorList(_var=);
%do i=1 %to 12;
"&_var&i"=%scan(&_color,&i)
%end;
%mend colorList;
%macro markerList(_var=);
%do i=1 %to 12;
class &_var&i / markersymbol="%scan(&_marker,&i)" linestyle=%scan(&_line,&i);
%end;
%mend markerList;
/*******************************************************************************************/
options nolabel;
ods path sashelp.tmplmst(read) work.templat(update);
/*******************************************************************************************/
proc template;
define style trend;
parent=Styles.Default;
class GraphFonts
"Fonts used in graph styles" /
'GraphDataFont'=("Arial",8pt)
'GraphUnicodeFont'=("Arial",10pt)
'GraphValueFont'=("Arial",12pt)
'GraphLabelFont'=("Arial",12pt)
'GraphAnnoFont'=("Arial",10pt)
'GraphFootnoteFont'=("Arial",12pt)
'GraphTitleFont'=("Arial",14pt,bold);
class color_list
"Colors used in the default style" /
'bgA'=lightgray;
class GraphBorderLines /
linethickness=2px;
class GraphColors /
'ggrid'=lightgray
'glabel'=black
'gcdata'=blue
'gwalls'=lightyellow
%colorList(_var=gdata)
%colorList(_var=gcdata);
%markerList(_var=GraphData);
end;
run;
/*******************************************************************************************/
proc template;
define statgraph temp;
begingraph;
entrytitle 'Yield & Input By UP_DOWN';
entryfootnote 'MIB Confidential, by Smoon team';
layout overlay / yaxisopts=(griddisplay=on);
barchart x=Week y=Input / group=UP_DOWN groupdisplay=cluster name="I"
yaxis=y2 fillattrs=(transparency=0.7) barwidth=1 clusterwidth=0.5;
seriesplot x=Week y=Yield / group=UP_DOWN groupdisplay=overlay name="Y"
display=all lineattrs=(thickness=2) markerattrs=(size=12) break=true;
layout gridded / columns=1 autoalign=(topleft topright);
entry halign=left textattrs=(color=blue) "UP weighted average = 75%";
entry halign=left textattrs=(color=red) "DN weighted average = 80%";
endlayout;
endlayout;
layout globallegend / type=column;
discretelegend "Y" / title="Yield(%)";
discretelegend "I" / title="Input(Kpcs)";
endLayout;
endgraph;
end;
run;
ods listing close;
ods html style=trend; *file='Yield.html' path='G:\SAS';
ods graphics on / reset=all width=9in height=4.5in;
proc sgrender data=test template=temp;
run;
ods html close;
ods listing;