2008年1月27日

把多張圖放在一頁,同時轉成PDF檔

如何把多張圖片放在一頁裡面,這算困擾我很久的問題,當然我知道Greplay可以用,大致上我也會用,但我總覺得預設的template不是很好用,終於在SUGI發現了Kevin P. Delaney寫的文章,不只簡單教了如何把多張圖片放在同一頁上,還教如何將圖片轉成PDF檔。

主要參考文章:
Multiple Graphs on One Page: The Easy Way (PDF) and the Hard Way (RTF)
ODS LAYOUT: Arranging ODS Output as You See Fit

先提如何將圖片放在一個PDF檔案中,其實語法相當的簡單。可以分為三步驟,1:打開一個PDF檔案。2:想要畫的SAS圖形。3:完成繪圖把該PDF檔關閉。

1:ODS PDF file="你想放的路徑(例如:c:\temp\graph.pdf)";
2:SAS/Grasph 語法;
3:ODS PDF close;

來做一個簡單的範例,先產生一堆在不同自由度下T分佈的機率吧。

data t (drop=i j);
   do j=1 to 30 by 2;

      do i=-3 to 3 by 0.1;
         df=j;
         x=i;
         y=probt(x,df);
         output;
      end;
   end;
run;


接者用Gplot把圖畫出來然後放一個PDF檔中。

options nodate nonumber;
goption reset=all device=pdfc;
ods pdf file="C:\temp\CHart\chart_test_1.pdf" STARTPAGE=never;

   proc gplot data=t;
      title2 "Chart1"; 
     where df le 15;
      plot y*x=df;
      symbol1 i=l;
   run;quit;
ods pdf close;


我這裡只把DF小於15的資料畫出來。其實這樣就簡單完成把圖形放置PDF檔中的語法了,比較特別需要說明的為device=pdfc,這指令是和SAS說在PDF檔中圖片的格式,作者覺得pdfc的格式在PDF檔案中會有比較好的效果,相對於GIF或其他的圖片格式。



過來就是重頭戲了,如何把多張圖片放在一頁,在文中作者教了至少4中方法,我這裡只說明ODS LAYOUT這個指令,Layout是在SAS V9或V9.1才有的指令,我覺得還滿簡單的,相對於要去修改Greplay的版模。

在畫圖之前先簡單說明LAYOUT我會的語法。

ods layout Start width=20cm height=28cm;
ods region x=0% y=5% width=45% height=45%;
/*SAS/Graphs 語法1*/

ods region x=51% y=5% width=45% height=45%;
/*SAS/
Graphs 語法2*/

ods region x=0% y=51% width=45% height=45%;
/*SAS/
Graphs 語法3*/

ods region x=51% y=51% width=45% height=45%;
/*SAS/
Graphs
語法4*/

ods layout end;


ODS LAYOUT:Start就是宣告我們要開始使用layout的指令,請想像我們手上拿一張白,width就是設定紙的寬度,我設定了20公分,height設定紙的高度,我設定28公分。

ODS REGION:宣告我下面的圖片要放在那個位置,
『x=51% y=5%』是說我將圖片要放在由左上角算起,整張紙X軸的第51%和Y軸上第5%的交叉點,當然這裡也可以用實際的長度單位來設定,例如x=11cm y=1cm。
『width=45% height=45%』設定我這一張圖片的大小,我是用相對長度,為整張紙45%寬度和紙長45%的長度,同樣也可以設為實際長度,如width=8cm height=10cm。
ods layout end:這也是必要語法,宣告上面的ODS LAYOUT設定結束。

依序設計這四張圖片想要放的位置就完成了,我隨意將剛剛製造的資料檔分成四張圖繪製,然後配合上面的語法就可完成我想要的工作了,完整的程式如下:


options nodate nonumber;
goption reset=all device=pdfc ;
ods pdf file="C:\temp\CHart\chart_test_2.pdf" STARTPAGE=never;

   ods layout Start width=20cm height=28cm;
   symbol1 i=l;

   ods region x=0% y=5% width=45% height=45%;
   proc gplot data=t;
      title2 'Chart1';
      where df le 5;
      plot y*x=df/noframe;
   run;

   ods region x=51% y=5% width=45% height=45%;
   proc gplot data=t;
      title2 'Chart2';
      where df ge 5 and df le 15;
      plot y*x=df/noframe;
   run;

   ods region x=0% y=51% width=45% height=45%;
   proc gplot data=t;
      title2 'Chart3';
      where df ge 15 and df le 25;
      plot y*x=df/noframe;
   run;

   ods region x=51% y=51% width=45% height=45%;
   proc gplot data=t;
      title2 'Chart4';
      where df ge 25 and df le 30;
      plot y*x=df/noframe;
   run;quit;

   ods layout end;
ods pdf close;


結果如下圖:




利用PDF輸出和ODS LAYOUT的指令理論上就在一頁可繪製出多張高品值的圖形了,當然ODS LAYOUT應用不只用於圖形,想要結合表格和圖形,也是很OK的啦。

2008年1月10日

有質感的code+ & SAS如何匯入Excel檔案

很多BLOG在說明程式的時候都會用漂亮的框框把程式『框』起來,看來我偷偷學會了。

那就順便簡單說明一下的SAS如何匯入Excel檔案吧。

如果已經很熟libname的語法,那就不用特別去背proc import的語法了,所以那下面的語法對很多人來說就是不難了

libname myxls "c:\myexcel.xls";
data temp1;
set myxls."Sheet1$"n;
run;
libname myxls clear;

這裡比較需要注意的地方在於Sheet1$後面那個「$」和"Sheet1$"n後面的「n」,其他就很簡單了。
當然這個語法不是只有那麼陽春,功能也是滿強大的,有機會在介紹了喔。

code的那個框框,我是參考[筆記]在文章裡顯示優質的程式碼區

來一個研究所吧

當開始聽到這個工作的時候,覺得天阿~要搞一個獨立研究所,沒有系的支持,一個研究所!而且是全台灣第一個此領域的研究所,從來都沒想過的工作,光想到就頭痛。


還好,這個所主要的負責老師
很棒(也很可能是未來的所長,八卦~),花了很多時間寫了短短3頁申請理由,短短3頁但真的寫得很好!我就負責把其他的申請書部分完成,申請研究所完成到這裡,突然覺得好像也沒有很難......就只是文書工作,不過這也可能是學校很支持所以沒有遇到很大的阻力吧。

申請出去了,出去前還一直會擔心有錯字(我超愛有錯字的)....印了精美的10多本申請書送到學院和校發會。在等待的過程中,一度聽到今年不過了,也一度聽到OK沒問題,真是波折,但最大的波折莫過於,在2007年中的時候,教育部突然宣佈全國研究生凍結,當然生統所也就一起再見了,學校就告知我們97學年不能招生了喔...聽了真的很想罵人!

突然年底的時候,學校又說,生統所97學年度可以招生了,真的是OOXX,這變化太快了吧,好了又要開始用簡章的東西,還好也不複雜只是開個小會討論考試科目等等。

終於到2007年1月,學校的簡章出來了,而生統所的網頁在中心的同事加持下也順利推出,雖然東西很少,但只是生統所感覺有個家了。

現在開始期待,也有點擔心,期待有誰會來報名,擔心報人人數會不會太少,雖然第一屆只有4個名額,但總是希望一次就來個100人考吧!這種感覺真的很奇妙,看一個從沒有到似乎已經看到學生了的研究所,還會有種淡淡的成就感,就算我只是小小的螺絲釘。


(應觀眾要求,來寫寫心得)

2008年1月9日

Sciscape 科景

Sciscape 科景(http://www.sciscape.org/),很久以前就名列在我的最愛中了,我三步五時(差不多3-5個月XD),就會去看一下有沒有有趣的科學發現,例如說最近有趣的主題「應用科學:你也在耶誕節工作嗎?」、「醫學: 阿斯巴甜安全嗎? 、「生物:貓的基因定序也出爐了!!」、「一般科學:急著發表論文嗎?」、「生物:左撇子,天生的!」等。

我就把應用科學:你也在耶誕節工作嗎?轉貼上,內容如下:

[Dec 30, 2007]
應用科學:你也在耶誕節工作嗎?

編輯 JR 報導

研究指出有越來越多的科學家放棄耶誕假期,繼續工作。

英國牛津大學科學家Richard J. Ladle與同事,用Google Scholar來統計在1996~2006年間於耶誕節當天繳交的科學論文數量,結果發現數量有增加的趨勢,並且10年來成長了6倍。此結果發表在Nature期刊上。

他們猜測有四個可能的因素助長這個趨勢:第一,以論文數量作為研究能力的衡量標準;第二,越來越多的行政與教學要求加諸在研究者上,使得科學家不得不犧牲假期寫論文。第三,全年無休的線上繳交系統越來越普遍。第四,宗教迷信-替來年的論文數量討個好兆頭。

超時工作已不是個陌生的話題,如何取得工作與生活的平衡,正考驗著現代人類社會的智慧。

參考來源:

* nature: Come all ye scientists, busy and exhausted. O come ye, O com

對我平常懶得看PAPER的人來說,還算個不錯的消遣。無聊的人就上去挖寶吧!