公告

[公告]
2014/01/17
由於已經是faculty的關係,不太有足夠時間寫部落格。因此更新的速度會相當緩慢。再加上近幾年來SAS GLOBAL FORUM沒有出現讓我覺得驚艷的技術文件,所以能分享的文章相對也減少許多。若有人推薦值得分享的SAS技術文件,請利用『問題討論區』告知。

2013/07/19
臉書留言板的功能因為有不明原因故障,因此特此移除。而intensedebate的留言板因管理不易,也一併移除。目前已經開啟內建的 G+ 留言系統,所以請有需要留言的朋友,可直接至『問題討論區』裡面留言。


2007年7月11日 星期三

Using ODS Styles with SAS/GRAPH®

原文載點:http://www2.sas.com/proceedings/forum2007/088-2007.pdf

這篇技術文件主要是在介紹 ODS 的 style option 在 SAS V9.2 版的進化程度。雖然目前的 V9.1 可以使用 ODS style,但是還無法完全滿足使用者的需求。在使用者不斷的催促抱怨以及其他更方便的統套軟體威脅 SAS 地位的情況之下,SAS 只有不斷在圖形介面上進行改善,畢竟這是他最令人詬病的一環。雖然 V9.2 版何年何月得讓使用者享受更便利的操作模式,我們無從得知,但藉由一些技術文件,讓我們有多一層的期待。

在 V9.2 版,一個名為 GSTYLE 的新語法被納入到 SAS/GRAPH 的大家族中。由下圖可以明顯比較出來有 GSTYLE 和沒 GSTYLE 所繪製出來的圖形有多大差別。



目前的版本可以在 ODS 後面加上一個 style= 的 option 來整合美觀任何圖表。以下是使用 style=normal 的一個範例:

ods rtf style=normal;
proc means data=sashelp.class maxdec=1 mean nway;
class age sex;
var weight;
output out=class mean=MeanWeight;
run;
title 'Weight by Age and Gender';
symbol i=join;
proc gplot data=class;
plot MeanWeight*age=sex / autovref;
run; quit;
ods rtf close;


在 V9.2 中,又多新增了五十個 ODS style。以下是一些可能比較會常使用的 ODS style。


不同的 ODS style 會做出不同格式的表格和圖形出來。以 PROC REG 來說,style=journal 和 style=journal2 可以做出兩種不同風格的信賴區間帶,如下所示:



除了 SAS 內部的設定外,他也允許使用者自己來定義具有獨特風格的 style。以改變字形來說,SAS 可以利用下列幾個語法來更改不同區域的文字字形:



整個過程需要經過 PROC TEMPLATE 來做修改。以下是一個公用的模版可讓使用者拿去做細部修改:

proc template;
define style Styles.Statistical;
parent = styles.default;
style GraphFonts /
'GraphTitleFont' = ("[sans-serif], [MTsans-serif]",11pt,bold)
'GraphFootnoteFont' = ("[sans-serif], [MTsans-serif]",10pt,italic)
'GraphLabelFont' = ("[sans-serif], [MTsans-serif]",10pt)
'GraphValueFont' = ("[sans-serif], [MTsans-serif]",9pt)
'GraphDataFont' = ("[sans-serif], [MTsans-serif]",7pt)
'GraphUnicodeFont' = ("[MTsans-serif-unicode]",9pt)
'GraphAnnoFont' = ("[sans-serif], [MTsans-serif]",10pt);
/* more elements */
end;
run;


此程式碼是要將 styles.default 的字形設定修改後存成 styles.statistical。字形的修改是呼叫Graphfont 語法所達成的。所有 [sans-serif] 可改成任何字形名稱,且要記得需要單引號(' ')把字型名稱包起來。而字形的大小、寬度(bold)或形式(italic)都可視情況添加在最後面。

除了字形外,SAS 也針對不同的圖形介面,開放給所有使用者進行修改。以輪廓圖為例,可呼叫 GraphContour 來進行修改:

style GraphContour /
startcolor = GraphColors('gramp3cstart')
neutralcolor = GraphColors('gramp3cneutral')
endcolor = GraphColors('gramp3cend')
displayopts = "LabeledLineGradient";


以下展示出三種不同的 displayopts 所繪製出來的輪廓圖:



箱型圖也可以改(呼叫 GraphBox):

style GraphBox /
capstyle = "serif"
connect = "mean"
displayopts = "fill caps median mean outliers";
capstyle = "serif" | "line" | "bracket"
connect = "mean" | "median" | "min" | "max" | "q1" | "q3"
displayopts = "fill | caps | median | mean | outliers | connect | notches";





使用 ODS 不但可以大幅簡化程式碼的行數,也可讓圖形介面變的更美觀。我們可以相當肯定 SAS 在這一方面的努力,只希望 V9.2 能夠早日問世。
CODE { display: block; /* fixes a strange ie margin bug */ font-family: Courier New; font-size: 8pt; overflow:auto; background: #f0f0f0 url(http://klcintw.images.googlepages.com/Code_BG.gif) left top repeat-y; border: 1px solid #ccc; padding: 10px 10px 10px 21px; max-height:200px; height:200px; // for IE6 line-height: 1.2em; }