全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1688 0
2012-02-02
%let depvar=  &regvar lag1 lag2 lag3 lag4 lag5  ;

/************************************************************************************
Purpose: 0.  Fama-MacBeth regression and Newwey _West 检验  by SAS
**************************************************************************************/
%macro FMReg(y=  ,out=  );
** 2. drop irrelevant estimates;
proc sort data=FB; by _model_ date; run;
data FB2; set FB; drop  &y _TYPE_  _DEPVAR_  _RMSE_ _IN_  _P_  _EDF_;
rename _model_=model; run;
proc transpose data=FB2 out=FBny name=name prefix=coef;
by model date; run;
data FBny; set FBny; retain code;
by model date; code=code+1; if first.date then code=1;run;
proc sort data=FBny; by model code name;run;
** 3. Newey-West t-stat for the time-series average of coefficients;
%let lags=3;*lags for Newey-West t-stat;
proc model data=FBny;
by model code name;
parms a; exogenous coef1 ;
instruments / intonly;
coef1 =a;
fit coef1 / gmm kernel=(bart, %eval(&lags+1), 0);
ods output parameterestimates=param1  fitstatistics=fitresult
OutputStatistics=residual;
quit;
** 4. output into column table;
data param1; set param1;
tvalue=put(tvalue,7.4);
if probt<0.1 then p='*  ';
if probt<0.05 then p='** ';
if probt<0.01 then p='***';
T=compress('('||tvalue||')'); PARAM=compress(put(estimate,7.5)||p);
run;
data param1a; set param1; keep model code name coef _name_;
_name_='PARAM'; coef=PARAM; run;
data param1b; set param1; keep model code name coef _name_;
_name_='T'; coef=T; run;
data param2; set param1a param1b;run;
proc sort data=param2; by  code _name_ model;run;
proc transpose data=param2 out=param3;
by code name _name_; id model; var coef; run;
data param3;
set param3;
if _name_='T' then do;
code=. ;name=.;
end;run;
** 5. find the range of periods and obs used;
proc sort data=fb out=fb3; by _model_; run;
data fb3;
set fb3;
keep _model_ date num; num = _edf_+_p_;
rename _model_=model;
run;
proc sql;
create table num(where=(model='MODEL1')) as
select  model, min(date) as start, max(date) as end, count(date) as range,
sum(num) as obs
from fb3
group by model;
quit;

proc transpose data=num out=num; by model; var start -- obs; run;

data num;
set num;
rename _name_=name;
MODEL1=put(col1, 7.0);
drop model col1;
run;
data &out;
set param3 num;
run;
%mend FMReg;

/*******************************************************************************/
proc sort data=m4_reg;
by date;
run;
proc reg data =  m4_reg outest=FB noprint;
by date;
  model ret= &depvar /adjrsq;
run;
%FMReg(y=ret ,out=Reg_table10);

proc reg data =  m4_reg outest=FB noprint;
by date;
  model oct= &depvar /adjrsq;
run;
%FMReg(y=oct ,out=Reg_table11);


/*A fixed effects regression using the absorption technique can be done as follows: */
proc sort data=m4_reg;
by stkcd date;
proc glm data =  m4_reg;
absorb stkcd;
model oct= &depvar/ solution noint; run;
quit;
/*Clustered standard errors may be estimated as follows: */
proc genmod data=m4_reg;
class stkcd;
model new_r= &depvar;
repeated subject=stkcd / type=ind; run;
quit;
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群