全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
2717 0
2013-12-27
/*******************************************************************************************************/
/*引用格式为
%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;


二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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