/*******************************************************************************************************/
/*引用格式为
%reglist(orig_table=betas);
其中betas为proc reg过程输出的表格,该语句中必须加outest=betas tableout EDF选项,示例如下:
proc reg data=acrue_temp6 outest=betas tableout EDF noprint ;
model TA_sd=CA;
model TA_sd=CA REV_REC_sd;
model TA_sd=CA REV_REC_sd PPE_sd;
model TA_sd=CA REV_REC_sd PPE_sd l_cs;
quit;*/
/*******************************************************************************************************/
%Macro reglist(orig_table=);
proc sql noprint;/*获取因变量名称*/
select _DEPVAR_ into :y from &orig_table;
quit;
/*将回归结果拆分为两个文件,其中一个存放BETA,另外一个存放R2*/
data &orig_table._1(drop=_RSQ_ Obs _DEPVAR_ &Y) &orig_table._R2(keep=_MODEL_ _RSQ_ Obs where=(_RSQ_ IS NOT NULL));
set &orig_table;
Obs=_EDF_+_P_+1;
where _TYPE_ in ("PARMS","STDERR","PVALUE");
drop _RMSE_ _IN_ _P_ _EDF_;
run;
/*先整理R2的表格*/
data &orig_table._R2(drop=_RSQ_ Obs);
set &orig_table._R2;
_RSQ_=round(_RSQ_,0.001);
format _RSQ_ BEST5.2;
format Obs BEST6.;
R2=put(_RSQ_,BEST8.5);N=put(obs,BEST8.);
run;
proc transpose data=&orig_table._R2 out=&orig_table._R2_1;
id _MODEL_;var R2 N;
run;
/*整理BETA*/
proc transpose data=&orig_table._1 out=&orig_table._2(drop=_LABEL_);
by _MODEL_;
ID _TYPE_;
run;
data &orig_table._3(drop=PARMS STDERR PVALUE sig);
set &orig_table._2;
format sig $3. beta $8. std $8.;
if PVALUE=. then sig="";
else if PVALUE<=0.001 then sig="***";
else if PVALUE>0.001 and PVALUE<=0.01 then sig="** ";
else if PVALUE>0.01 and PVALUE<=0.05 then sig="* ";
else if PVALUE>0.05 and PVALUE<=0.1 then sig="+ ";
else sig=" ";
beta=put(PARMS,BEST5.2)||sig;
if STDERR~=. then std="("||put(STDERR,BEST5.2)||")";
run;
data &orig_table._31(drop=std rename=(beta=parm)) &orig_table._32(drop=beta rename=(std=parm));
set &orig_table._3;
if first._MODEL_=1 then i=0;
i+1;
by _MODEL_;
run;
data &orig_table._4;
set &orig_table._31 &orig_table._32;
run;
proc sort data=&orig_table._4;
by _MODEL_ i;
run;
data &orig_table._5;
set &orig_table._4;
if first.i=1 then i1=0;
i1+1;
by _MODEL_ i;
run;
proc sort data=&orig_table._5;
by i i1;
run;
proc transpose data=&orig_table._5 out=&orig_table._6(drop=i i1);
by i _NAME_ i1;
var parm;
id _MODEL_;
run;
/*合并BETA和R2*/
data reglist;
SET &orig_table._6 &orig_table._R2_1;
label _NAME_="解释变量";
RUN;
Proc report data =reglist;
footnote ""***"表示0.1%下显著;"**"表示1%下显著;"*"表示5%下显著;"+"表示10%下显著;";
Run;
footnote "";
proc delete data=Reglist &orig_table._R2_1 &orig_table._R2 &orig_table._31 &orig_table._32 &orig_table._1-&orig_table._6;run;
%Mend reglist;