2014-10-01 33 views
0

嗨我很確定我的代碼是完全錯誤的。我嘗試運行一個宏來執行一個事件研究,當公司被納入投資組合時,然後刪除以測量模型係數的平均變化。在這裏我試圖看看這個包含。當我運行宏時出現錯誤:事件研究宏返回重大錯誤

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); 
+0

您的代碼中沒有任何循環,因此很難查看將如何生成該錯誤。你是否顯示完整的代碼?宏中的UCLA教程非常好,很容易通過谷歌找到。 – Reeza 2014-10-01 03:32:17

+0

我剛剛編輯帖子以包含其餘的代碼。我會檢查加州大學洛杉磯分校的東西。目前看起來很棒。 – Hamish 2014-10-01 04:04:59

回答

2

有關%do語句和&的錯誤消息我沒有解決,因爲您已經忘記了%MACRO語句和%evntrun定義的開始。它應該是:

%macro evntrun(dataset=libref.dset,portf=evntdum) ; 

可能還有其他問題。將建議使&開始和&結束參數%estudy。

+0

這讓它開始運行。我正在修改一些其他代碼,所以不確定發生了什麼。至少現在我可以開始亂搞了。 – Hamish 2014-10-01 23:00:27

+0

我收到ds和subgroup沒有定義的錯誤。這是因爲&開始和結束參數不在%estudy?我以爲我在第二個宏中設置了開始和結束參數。 – Hamish 2014-10-01 23:13:08

+0

您已經將它們傳遞給宏變量而非實際值。如果您還沒有在其他地方聲明&數據集,它將不存在。我的猜測是你已經在別的地方使用過它,但是它被創建爲本地宏變量而不是全局宏變量。 – Reeza 2014-10-03 01:39:16