作者bookface (keep going)
看板Statistics
標題[問題] SAS-巨集內使用IML產生錯誤訊息
時間Tue Aug 17 00:12:29 2010
在SAS巨集內使用Proc IML產生下列錯誤訊息
ERROR: (execution) Matrix has not been set to a value.
operation : [ at line 28272 column 99
operands : CUM_DIV_PV, I, DIV
CUM_DIV_PV 758 rows 1 col (numeric)
I 0 row 0 col (type ?, size 0)
搜尋之後仍無法順利排除此錯誤
想請問各位先進如何解決此一問題.
我的巨集是要從原本完整dataset中,
透過輸入公司代碼, 挑出相同公司代碼的較小資料集,
之後在針對此較小的資料進行矩陣運算.
下面簡易列出我的程式, 希望能夠得到先進們的指點, 謝謝!
%MACRO DivPV(Num);
%DO I = 1 %TO &Num;
DATA _NULL_;
set firmlist;
IF _n_= &I Then Do;
CALL SYMPUT('ID', firmid);
END;
RUN;
Data subset;
set fulldata;
where firmid = &ID;
run;
proc IML;
start main;
use subset var _all_ ;
read all into date_S0;
n2 = nrow(date_S0);
cum_div_pv = repeat(0,n2,1);
... 之後的運算都是為了求出cum_div_pv
finish main;
run main;
quit;
%END;
%MEND DivPV;
%DivPV(2138);
run;
謝謝!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.111.160
1F:推 MmmRrrrX:給你個建議,用巨集作迴圈跑iml,很難看出錯誤在哪。 08/17 00:50
2F:→ MmmRrrrX:先以I等於某個數字,跑一遍程式,比較好看出城是錯在哪 08/17 00:51
3F:→ MmmRrrrX:從錯誤訊息來看,很像是某個矩陣運算過程中不合法。 08/17 00:53
4F:→ MmmRrrrX:不確定問題是不是剛好在省略的那段。 08/17 00:54
5F:推 imaltar:要檢查矩陣的運算吧 也許是在矩陣計算的行列不合 08/17 11:58