公告

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

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


2007年4月13日 星期五

STOP! WAIT! GO! See What Traffic-Lighting Can Do For You

原文載點:http://www.nesug.info/Proceedings/nesug05/pos/pos1.pdf

我以前經常用 ODS 系統把報表和結果輸出成 rtf 或 html 檔,rtf 主要的優點是好編輯,html 主要的優點是印出來很華麗。但近日在 NESUG 上面看到一篇文章,裡面居然提到 ODS 也可以生出 EXCEL 檔(.xls)。我比較推薦這篇文章的另一個原因是,從 ODS 輸出的 xls 檔,不但可以做一些版面配置,而且還可以直接在 SAS 裡面呼叫 EXCEL 開啟檔案,並能進行同步修改。雖然這個功能作者只有用在 PROC PRINT 的程序上,但這可以解決一些編寫程式的問題,文末再來敘述。先介紹一下這個 ODS 功能的用法。

設定文字顏色格式

利用 PROC FORMAT 來指定哪些數據用哪些顏色,套入 PROC PRINT 中,再利用 ODS 輸出的功能讓效果呈現在 EXCEL 報表上。程式如下所示:

Proc format;
Value sigf low-<0.0011=’Green’
0.0011-<0.0501=’Red’
0.0501-<0.1001=’Blue’
other=’Black’;
run;

Ods msoffice2k file=’significance_foreground.xls’path=odsout style=styles.minimal;
Proc print data=yourlib.yourdata label uniform;
Var var2 chisq;
Var chisqp / style={foreground=sigf.};
Var chisqdf;
Id var1;
Title1 ‘Foreground Traffic Lighting’;
Run;
Ods msoffice2k close;


PROC FORMAT 的功能就是在設定數據在某個範圍之下被分配到哪種顏色。一般的 SAS 程式要套用 PROC FORMAT 的設定都要在之後的程式加上 FORMAT [var] [varfmt.]; 的語法,但在 PROC PRINT 下,可直接在想要套用的便樹後面加上 style 的選項。foreground 即表示文字顏色,foreground=sigf. 即表示將 PROC FORMAT 對 sigf 的設定套用在 foreground 上。然後,使用 msoffice2k 讓 ODS 把 PROC PRINT 的結果輸出到 EXCEL,並把檔名設定為 significance)foreground.xls。這個檔案會存在 SAS 的預設目錄下,如果要存在指定的目錄,就要把完整路徑寫上去。path=odsout 的功能不清楚,但當我實際使用在別的資料集時,會出現錯誤訊息。後來把 path=odsout 拿掉後可以順利產生 .xls 檔,沒有任何異狀。所以若使用者有同樣情況,可以大膽地把這個選項拿掉。

產生的檔案大概長的像下圖所示:

nesug18_pos1_01

設定背景顏色格式

能設定文字顏色就一定可以設定背景顏色。語法和上述程式沒有太大改變,只是將 foreground 改成 background 而已。程式如下:

Proc format;
Value sigb low-<0.0011='Red'
0.0011-<0.0501='Yellow'
other='Green';
run;

Ods msoffice2k file=’significance_background.xls’ path=odsout style=styles.minimal;
Proc print data=yourlib.yourdata noobs label uniform;
var xlab xval totaln totper nsumn colpern nsumno colperno;
var chisqp / style={background=sigb.};
title1 'Significance Background Traffic Lighting';
run;
Ods msoffice2k close;


同樣地,先用 PROC FORMAT 設定好背景顏色出現的條件,然後把他代入 background 即可。產生的效果如下所示:

nesug18_pos1_02

加星號

有時候我們會在不同的顯著型 p-value 後面打上不同個數的星號,如 <0.05>Proc format;
picture sigstar low-<0.0010='9.9999***'
0.0011-<0.0501='9.9999**'
0.0501-<0.1001='9.9999*'
other='9.9999';
run;

Ods msoffice2k file=’significance_stars.xls’ path=odsout style=styles.minimal;
Proc print data=yourlib.yourdata noobs label uniform;
var xlab xval totaln totper nsumn colpern nsumno colperno chisqp;
format chisqp sigstar.;
title1 'Significance Stars Traffic Lighting';
Title1 ‘Background Traffic Lighting’;
Run;
Ods msoffice2k close;

兩個地方稍微和之前的程式不同。一是在 PROC FORMAT 中指定格式變數的宣告語法從 value 改成 picture。另外,要套用 sigstar 的語法也要變回一般常用的 FORMAT [var] [varfmt.]; 格式。附帶一提,sigstar 在 PROC FORMAT 裡面設定星號時都會在前面加上 9.9999,這會將被格式化的變數(chisqp)變成小數點四位的格式。比方說原始數據是 1,就會被改成 1.0000,格式被改後才會開始加上星號,不過如果數據是落在 other 的範圍內,就不會有任何變動。

做出來的樣子如下所示:

nesug18_pos1_03

ODS msoffice2k 的好處不止在於可以把 PROC PRINT 的檔案輸出成 EXCEL 格式,對 SAS 不熟的人,可以直接在 SAS 內開啟的 EXCEL 進行計算的動作,也可以任意更改欄位順序。如果只想用裡面一小部分的檔案,也可以複製需要的資料,然後貼到新的 edit 視窗,用 data step 的步驟馬上建立新的資料集。總之這可以活用的彈性很大,很適合初學者使用。

原文內還有關於如何在 PROC TABULATE 內著色的教學,不過我覺得不是很實用,所以就不寫了。有興趣的人可以直接下載原文來參考。

CONTACT INFORMATION
Your comments and questions are valued and encouraged. Contact the author at:
Louise Hadden
Abt Associates Inc.
55 Wheeler St.
Cambridge, MA 02138
Work Phone: 617-349-2385
Fax: 617-349-2675
Email: louise_hadden@abtassoc.com
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; }