我必须运行具有 300 多个外生变量的 Newey-West 回归(由于多个滞后和时间虚拟变量)。这是运行 SAS Newey-West 回归的典型方法:
proc model data=two;
endo r_invest;
exog r_int r_gnp;
instruments _exog_;
parms b0 b1 b2;
r_invest=b0 + b1*r_int + b2*r_gnp;
fit r_invest / gmm kernel=(bart,5,0) vardef=n;
run;
quit;
假设我有390次假人叫tdum1
tdum390
,怎么能避免写r_invest=b0 + b1*r_int + b2*r_gnp +b3*tdum1....b390*tdum390;
?
我不确定此过程的确切语法,但此宏将写出您在代码下方注释中列出的变量。 您可以对其进行编辑以适合所需的确切语法。
%macro writeOutMyVars();
%do i=1 %to 390;
+ b%eval(&i+2)*tdum&i
%end;
%mend;
proc model data=two;
endo r_invest;
exog r_int r_gnp;
instruments _exog_;
parms b0 b1 b2;
r_invest=b0 + b1*r_int + b2*r_gnp %writeOutMyVars(); ;
fit r_invest / gmm kernel=(bart,5,0) vardef=n;
run;
quit;
如果在代码顶部添加"options mprint;",则宏输出将写入日志,以便您可以看到它在做什么。