嗨我很確定我的代碼是完全錯誤的。我嘗試運行一個宏來執行一個事件研究,當公司被納入投資組合時,然後刪除以測量模型係數的平均變化。在這裏我試圖看看這個包含。當我運行宏時出現錯誤:事件研究宏返回重大錯誤
Apparent symbolic reference I not resolved, The %DO statement is not valid in open code**.
我懷疑這裏一定有一些重大缺陷。
任何建議,將不勝感激,如果任何人都可以指向一個很好的在線指南,也將是太棒了。
%macro estudy(ds=var1,subgroup=evntdum);
%let evntdays=%eval(&end-&start+1);
/日期計數器和分割數據和事件期間/
data estper evntper;
merge &ds (drop=before) n&ds;
by firm evntdate;
if first.evntdate then relday=-before_sum - 1;
relday + 1;
if relday <-30 then output estper;
if &start <= relday <= &end then output evntper;
run;
/*模型估計週期/參數取出公司。非港口是加權收益而不是投資組合。我排除每家公司將其納入事件*/
proc reg data=estper outest=mmparam (rename=(intercept=alpha port_ret=beta1 Non_port_ret=beta2)
keep=asx evntdate intercept asx200_ret non_asx200_ret) noprint;
by asx evntdate;
model var1(firm ret)= asx200_ret (non_asx200_ret-weighted_ret(var1));
quit;
proc reg data=evntper outest=afiparam (rename=(intercept=alpha port_ret=beta1 Non_port_ret=beta2);
keep=firm evntdate intercept port_ret non_prt_ret) noprint;
by firm evntdate;
model var1(firm ret)= (port_ret-weighted_ret(var1)) non_firm_ret;
quit;
run;
%mend estudy;
然後調用宏:
/*一個天統計信息*/
%evntrun(dataset=libref.dset,portf=evntdum);
%do i=0 %to 0;
%let start=&i;
%let end=&i;
%estudy(ds=&dataset,subgroup=&portf)
%end;
/*多日統計*/
%let start = -120;
%let start = 180;
%estudy(ds=&dataset,subgroup=&portf);
%mend evntrun;
/*運行程序*/
%evntrun(ds=&dataset,subgroup=&portf);
您的代碼中沒有任何循環,因此很難查看將如何生成該錯誤。你是否顯示完整的代碼?宏中的UCLA教程非常好,很容易通過谷歌找到。 – Reeza 2014-10-01 03:32:17
我剛剛編輯帖子以包含其餘的代碼。我會檢查加州大學洛杉磯分校的東西。目前看起來很棒。 – Hamish 2014-10-01 04:04:59