2009年3月26日

遇見未來的

這4個研究所的小朋友,是我於2007年就期待看到的一群,當時還在猜測他們是誰,會哪裡考來。

現在他們已經入學超過了半年,也認識快9個月了,我無法否認,對這群小朋友有不一樣的感覺,因此也花了比較多時間在他們身上,把一些我覺得重要的東西讓他們瞭解,但當下一屆出現時,也許我這個熱情就會修正了。終究,他們是我曾經期待的一群。〔將自己放在未來,總有減壓的和跳離現實痛苦的感覺,享受過就好了,不要沈迷在未來與過去之間。〕

我沒讀過國立大學,我不知道那邊的資源,但我的過往經驗告訴我,他們真的很幸福,老師數比學生多,每次諮詢報告老師全到的陣容,還真是完整,除了老師的資源,我同事總是能給這群小朋豐富又實務的資源,這也許就是某種「產學合作」吧。如果當時有這樣的資源,也許我就不用花那麼多時間自修了,想當初自己嘗試「認識」MACRO或是說入門,就花了好多好多時間了。

2009年2月1日

Google 變成有害網頁?

很難得的經驗,用Google找東西,所有的網頁均變成「這個網頁可能會損害您的電腦」,連Google首頁都有一樣的狀況(下圖)。

2009年1月8日

兩隻笨貓終於可以重逢了

橘子貓今天終於可以在遙遠的那一方見到另外一隻笨貓了,雖然這一切真的是很突然。
永遠祝福那可愛的兩隻笨貓。

2008年12月7日

想念的影片

這個已經不知道在那個世界的貓,這是唯一能夠想起她身影的方式了,
一位很愛她的女生曾經說過「她是全世界最可愛的貓」。

當我想要一個人的時候,我都會去她休息的地方坐坐,曬曬太陽,
如果你們看到一個人,默默在那邊舔者傷口,請不要打擾他,
也許他身旁正有一隻全世界最可愛的貓。

2008年11月22日

SAS Macro ( 巨集 ) 簡易教學

SAS的巨集雖然屬於P3等級的內容,不過對於實際分析資料的使用者來說,應該是相當實用的語法,且必要學習的。巨集沒有想像中的難,只是多了一些平常不會使用的符號,例如『%』或『&』等,這一篇教學將會舉一個簡單的例子,說明巨集的使用方式。


先來假設一個狀況,有4個資料檔{a1,a2,a3,a4},每個資料檔中均包含4個變項{y1,x1,x2,x3},而我想以PROC REG來分析4個資料檔中「y1和x1」、「y1和x2」及「y1和x3」的相關性。

第一步:先建立4個資料檔並包含3個變數。
先以do loop建立4個資料檔,而y1、x1、x2、x3的值將隨機由uniform分佈中抽取。程式如下:

data a1 a2 a3 a4 ;
do i=1 to 4;
do j=1 to 100;
y1=uniform(123);
x1=uniform(1234); x2=uniform(12345); x3=uniform(12345);
drop i j;
if i=1 then output a1;
else if i=2 then output a2;
else if i=3 then output a3;
else if i=4 then output a4;
end;
end;
run;


第二步:用傳統方式寫PROC REG程式。
當然可以傳統語法,逐筆將資料檔名稱和變項寫入程式中,以資料a1為範例:

proc reg data=a1;
model y1=x1;
run;
proc reg data=a1;
model y1=x2;
run;
proc reg data=a1;
model y1=x3;
run;

然後再將這一小段程式複製3次,將data分別改成a2、a3、a4即可。

第三步:改用巨集的語法。
其實可以很清楚的找到一個邏輯性;PROC REG的程式每次只需要修改下面藍色的部分就好,
proc reg data=a1;
model y1=x3;
run;

因此抓到這個邏輯以後,就可以寫出一段小小的巨集。

%macro My_reg (mydata, myvar);
proc reg data=&mydata;
model y1=&myvar;
run;
%mend My_reg;

這裡出現了奇怪的符號「%」和「&」。『%mcaro』為告訴SAS要開始寫一段巨集程式,有開始就會有結束,如同do loop會有do...end一樣,在巨集語法中結束即為『%mend』。

在『%macro』後面的My_reg為宣告這段巨集程式的名稱,為何要宣告,因為我們可能會同時使用上很多個巨集程式,如沒有宣告,SAS程式也搞不清楚現在要使用那個巨集程式。

接下來的『(mydata, myvar)』,就是在巨集有幾個「變數」會換(前面PROC REG藍色的2部分),並給這些變數一個名稱。

在被巨集程式的包裹住的語法,絕大部分都和之前寫的程式一樣,只有多了『&mydata』和『&myvar』這兩個,這個由『&』開頭的兩個部分稱為『巨集變項』,這為等一下要被取代的部分。

第四步:使用My_reg巨集。
已經寫好的巨集叫『My_reg』使用時,在巨集名稱前多加『%』,寫法如下:

%My_reg (a1,x1);
%My_reg (a1,x2);
%My_reg (a1,x3);

%My_reg (a2,x1);
%My_reg (a2,x2);
%My_reg (a2,x3);

%My_reg (a3,x1);
%My_reg (a3,x2);
%My_reg (a3,x3);

%My_reg (a4,x1);
%My_reg (a4,x2);
%My_reg (a4,x3);

在巨集名稱後面()要放入取代
巨集變項的「文字」,記得要以『,』區隔。執行後SAS便會將所寫入的文字逐步取代到『My_reg』巨集中,然後執行。

第五步:多一點的寫法。
這裡主要希望SAS能自己重複執行這個結果,不需要如第四步一樣手動改文字,此程式先不在這裡說明了,有興趣的請自行研究了。

%macro My_reg1 ;
%do i=1 %to 4;
%do j=1 %to 3;
proc reg data=a&i;
model y1=x&j;
run;
%end;
%end;
%mend My_reg1;
%My_reg1;