事件研究宏返回重大错误

时间:2014-10-01 02:35:17

标签: sas sas-macro

嗨,我很确定我的代码是完全错误的。我试图运行一个宏来执行事件研究,当公司被纳入投资组合,然后被移除以测量模型系数的平均变化。在这里,我试着看看包含。当我运行宏时,我得到错误:

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;

/ * multiday statistics * /

%let start = -120;
%let start = 180;
%estudy(ds=&dataset,subgroup=&portf);
%mend evntrun;

/ *运行程序* /

%evntrun(ds=&dataset,subgroup=&portf);

1 个答案:

答案 0 :(得分:2)

有关%do语句和&amp; i未解决的错误消息是因为您忘记了%MACRO语句和%evntrun定义的开头。它应该是:

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

也可能存在其他问题。建议制作&amp; start和&amp; end参数到%estudy。