%macro my_cn2(data =, y =, x =, c_x =, l_r=, z =);
ods trace on / listing;
proc contents data = &data.;
ods output Variables = contents_;
run;
ods trace off;
data contents_;
set contents_;
where upcase(Variable) = "%upcase(&y.)";
call symputx("type", type);
run;
%if "&type." = "Num" %then %do;
data temp_data;
set &data.;
y_ = put(&y. ,z&z..);
run;
%end; %else %do;
data temp_data;
set &data.;
y_ = &y.;
run;
%end;
proc sql;
create table class_ as
select distinct y_
from temp_data;
quit;
%let data_class = class_;
%let open_d = %sysfunc (open(&data_class.));
%let row_n = %sysfunc(attrn(&open_d., nobs));
%let close_d = %sysfunc(close(&open_d.));
proc sql noprint;
select y_
into :y1 - :y&row_n.
from class_;
quit;
data _null_;
comb_ = comb(&row_n.,2);
call symputx("comb_", comb_);
run;
proc iml;
allcomb_ = allcomb(&row_n., 2);
create allcomb var {allcomb_};
append;
close allcomb;
quit;
%let data__ = allcomb;
%let open_d = %sysfunc (open(&data__.));
%let row_nn = %sysfunc(attrn(&open_d., nobs));
%let close_d = %sysfunc(close(&open_d.));
proc sql noprint;
select allcomb_
into :r2n_1 - :r2n_&row_nn.
from allcomb;
quit;
%do comb_i = 1 %to &row_nn. %by 2;
%let comb_i_ = %sysevalf(&comb_i. +1);
%let comb__ = 1;/*66*/
/*%put &comb_i. &comb_i_.;*/
/*data comb_&comb__.;*/
data _&&&&y&&r2n_&comb_i...vs_&&&&y&&r2n_&comb_i_...;
set temp_data;
where y_= "&&&&y&&r2n_&comb_i..." or y_ = "&&&&y&&r2n_&comb_i_...";
run;
%if "&l_r." = "t" %then %do;
proc logistic data = _&&&&y&&r2n_&comb_i...vs_&&&&y&&r2n_&comb_i_... plots=all;
class &c_x.;
model y_ = &x. &c_x.;
output out = o__&&&&y&&r2n_&comb_i...vs_&&&&y&&r2n_&comb_i_... PREDICTED= p PREDPROBS= p2;
quit;
%end;
%let comb__ = %sysevalf(&comb__. +1);/*66*/
%end;
%mend;
%my_cn2(data = mysas.unk, y = final, z=1)
data 資料集
y 類別變數
z 類別變數為數值型態時且類別總類小於10 z=1 小於100 z=2 .... 文字形態時可不輸入
4類別分組後結果