%macro Deviance_table(data, y, n, old_x) ; /********************************************************************************************************* *名稱: * *作者:jimmy * *日期:2016/06/30 * *說明: * * * * * *********************************************************************************************************/ /*進行組合*/ ods trace on / listing; proc reg data = &data.; model &y. = &old_x. / selection = RSQUARE; ods output SubsetSelSummary = gx; quit; ods trace off; proc sql; select VarsInModel into :g1 separated by "-" from gx; quit; /**/ /*取出組合 做多次迴歸*/ %do i = 1 %to &n; %let b = %scan(%bquote(&g1.), &i,%str(-)); ods trace on / listing; proc logistic data = &data. desc; model &y. = &b. / aggregate scale = none; ods output GoodnessOfFit = test&i.; run;title;footnote;quit; ods trace off; data newtest; run; %end; /**/ proc sql; create table newtest like test1; quit; %do i = 1 %to &n; proc sql; insert into newtest select * from test&i where Criterion = "Deviance"; run;title;footnote;quit; %end; proc print data = newtest; title "&g1"; run;title;footnote;quit; %mend; %Deviance_table(data = mysas.reg13_5, y = y, n = 3, old_x = x1 x2)只要輸入變數,就會依照變數的所有組合,進行多次的proc logistic。
這支macro主要是想要把每組模型的Deviance集合在一起。
因為proc logistic沒有selection的控制項,沒辦法進行變數的組合,所以用了proc reg來完成,但非常沒效率。
最後呈現的報表不易觀看,會持續改進此macro。
將會產生的報表 |
主要的內容 |
%Deviance_table(data = 資料集, y = 依變數, n = 3==(2^2-1), old_x = x1 x2)