範 例 一 : 矩陣轉置、加、減、乘 與函數運算(PROC IML) 程式檔名稱 : linEAR1.htm 程式檔指令 option ps=60 ps=70; PROC IML; 啟動 SAS IML 程序進行矩陣運算 試驗第一週的集蛋資料,5隻雞 試驗處理後連收 7天的蛋。7列5行 egg1 = { 1 0 1 0 1, 0 1 1 1 0, 1 0 1 0 1, 1 0 1 1 0, 0 1 1 0 0, 1 0 1 0 1, 1 0 0 1 1}; 試驗第二週的集蛋資料。7列5行 egg2 = { 1 0 1 0 1, 1 1 1 1 0, 0 1 1 1 1, 1 0 1 1 1, 0 1 1 0 0, 1 1 1 0 1, 1 1 1 1 0}; 試驗進行前一週的集蛋資料。7列5行 egg0 = { 1 1 1 0 1, 1 0 1 0 0, 0 1 1 1 0, 1 1 0 0 1, 0 0 1 0 0, 1 1 1 0 1, 1 1 1 1 0}; trsegg1 = egg1`; 矩陣轉置,以雞為列,天為行 來表示相同的資料。 egg12 = egg1 + egg2; 二試驗期的合併記錄 print trsegg1, egg12; rowi = { 1 1 1 1 1 1 1 }; 用來加全部總產蛋數的列 stage0 = rowi*egg0; 試驗前一週 各隻雞的總產蛋數 stage1 = rowi*egg1; 試驗第一週各隻雞的總產蛋數 stage2 = rowi*egg2; 試驗第二週各隻雞的總產蛋數 eggn = stage1 + stage2; 全程各隻雞的總產蛋數 rowij = { 1 0 1 0 1 0 1, 0 1 0 1 0 1 0}; 用來加總奇數天(第一列)產的蛋數的列 或偶數天(第二列)產的蛋數的列 eggij = rowij*egg12; 各隻雞奇數天與偶數天的產蛋數(二試驗期) print eggij, stage0, stage1, stage2, eggn; diffij = egg0 - egg1; 試驗前一週與試驗後一週的差異 diff = rowi * diffij* {1 1 1 1 1}`; 差異合計 print diffij, diff; run; 輸出 1-1 行列對調的轉置矩陣 TRSEGG1 1 0 1 1 0 1 1 0 1 0 0 1 0 0 1 1 1 1 1 1 0 0 1 0 1 0 0 1 1 0 1 0 0 1 1 輸出 1-2 二試驗期的合併記錄,相同一天的蛋加在一起 EGG12 2 0 2 0 2 1 2 2 2 0 1 1 2 1 2 2 0 2 2 1 0 2 2 0 0 2 1 2 0 2 2 1 1 2 1 輸出 1-3 各隻雞奇數天的蛋(第一列)與偶數天的蛋 EGGIJ 5 4 7 3 5 5 3 6 4 3 輸出 1-3 各隻雞不同週的產蛋數(試驗前一週、試驗第一、二週、全期) STAGE0 5 5 6 2 3 STAGE1 5 2 6 3 4 STAGE2 5 5 7 4 4 EGGN 10 7 13 7 8 輸出 1-4 試驗前一週與試驗後一週的差異與差異合計 DIFFIJ 0 1 0 0 0 1 -1 0 -1 0 -1 1 0 1 -1 0 1 -1 -1 1 0 -1 0 0 0 0 1 0 0 0 0 1 1 0 -1 DIFF 1