看板 Statistics 關於我們 聯絡資訊
※ 引述《fishouse (new hand)》之銘言: : proc iml; : a={1,2,3}; b={3,4,5}; c=2#(a+b); : d={30,45,60}; : do until (2#c>d); : c=c+1; : end; : print a b c d; end; : ----------------------------------------------------- : 我想跑出的表格是像下面這樣 : a b c d : 1 3 16 30 : 2 4 23 45 : 3 5 31 60 : 但若按照我上面的程式碼下去跑會變成 : a b c d : 1 3 23 30 : 2 4 27 45 : 3 5 31 60 : 只有第三列是我想表達的意思,第一列跟第二列的c值都跑掉了。 : -------------------------------------------------------- : 新手第一次接觸sas,煩請各位統計先進能指點迷津,謝謝。 看得出來SAS是以所有c的元素都大於d的元素才停止do的動作 而 c=c+1; 是每一個元素都 +1 自然會有某幾列超過你的要求 我使用兩個迴圈來解決,不過不是很優的寫法 迴圈數如果太多,會使運算時間大幅上升 不過如果只要處理幾十個幾百個,應該還感覺不出來 proc iml; a={1,2,3}; b={3,4,5}; c=2#(a+b); d={30,45,60}; n=nrow(a); do i=1 to n; do until (2#c[i]>d[i]); c[i]=c[i]+1; end; end; print a b c d; quit; -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.172.238.133
fishouse:非常感謝!! 03/05 22:05