两个表:
1.“个股与市场的日收益率”表,字段包括(股票代码,交易日期,日收益率,市场日收益率)
2.“个股的公告日期”表,字段包括(股票代码,公告日期)
我想从“个股的公告日期”表读出该表的第一个记录(以a表示),然后在“个股与市场的日收益率”表中搜索一下 count(表1.股票代码=a.股票代码 and 表1.交易日期<a.公告日期-30 and 表1.交易日期>=a.公告日期-280)。就是看表1里该股票在公告前的前280天至前30天共有多少天交易记录。
如果count>200,则对这些记录进行回归处理.模型是“日收益率=a+b*市场日收益率”,样本是股票代码=a.股票代码,交易日期<a.公告日期-30 and 交易日期>=a.公告日期-280。
然后把回归生成的a、b以及该次回归的一些统计量放在一个新表(表3中),该表的字段包括(股票代码,公告日期,a值,b值,相应的统计量)
最后将“个股的公告日期”表的指针下移一个,再重复以上的过程,生成的a、b也插入表3中。直至指针移动到表尾。
下面是我写的初步的程序:
1.“个股与市场的日收益率”表table1,字段包括(股票代码stkcd,交易日期date,日收益率r_stk,市场日收益率r_market)
2.“个股的公告日期”表table2,字段包括(股票代码stkcd,公告日期date_gg)
%macro a(x,y);
data a;
set table1;
where stkcd=x and y-280<=date<y-30;
keep stkcd r_stk r_market;
run;
proc reg data=a outset=d
model r_stk=r_market;
run;
data d;
set d;
if (_edf_+_p_)<200 then delete;
data e(keep=sn obs ???)
set d;
sn=_n_;
obs=(_edf_+_p_);
label sn="个股序号"
label obs=" 观测值个数"
run;
%mend a(x,y);
data a
set table2;
keep stkcd date_gg;
%a(stkcd date_gg); /*这能实现循环吗?*/
run;