Vous êtes sur la page 1sur 5

%let test_macro= 1;

%put &test_macro.;
%macro reg();
%do %while(&test_macro. ne 0);
%put &test_macro.;
proc contents data=my_lib.shivani out = my_lib.shivi_contents(keep=name)
;
run;
proc sql;
select name into: shivi_name separated by " " from my_lib.shivi_
contents
where name not in ("flag_12month","hh_no");
quit;
%put &shivi_name.;
ods output "Parameter Estimates"=my_lib.reg_output;
proc reg data= my_lib.shivani ;
model flag_12month= &shivi_name. /vif;
run;
ods output close;
data my_lib.reg_output1;
set my_lib.reg_output;
keep variable VarianceInflation;
where variable ne "Intercept";
if VarianceInflation=. then VarianceInflation=99999999;
run;
proc sort data= my_lib.reg_output1;
by descending VarianceInflation;
run;
data my_lib.reg_output2;
set my_lib.reg_output1;
length=length(variable);
sub_name = substr(variable,10,length);
run;
data my_lib.sample;
set my_lib.reg_output2;
run;
proc sql;
select sub_name into: top_name1 separated by " " from my_lib.sam
ple;
quit;
%put &top_name1.;
%do i= 1 %to 2;
%let x=%scan(&top_name1.,&i.," ");
%put &x.;

proc sql;
select distinct information_value into: iv_var separated
by " " from my_lib.char_num_iv
where varname="&x.";
quit;
%put &iv_var.;
data my_lib.sample;
set my_lib.sample;
if sub_name ="&x." then iv1= &iv_var.;
run;
%end;
data my_lib.sample2;
set my_lib.sample;
if _n_=1 then call symput("vif",VarianceInflation);
run;
%put &vif.;
/*******************************FOR VIF GT 3****************************
****/
%if %sysfunc(int(&vif.)) ge 3 %then
%do;
data my_lib.sample1;
set my_lib.sam%let test_macro= 1;
%put &test_macro.;
%macro reg();
%do %while(&test_macro. ne 0);
%put &test_macro.;
proc contents data=my_lib.shivani out = my_lib.shivi_contents(keep=name)
;
run;
proc sql;
select name into: shivi_name separated by " " from my_lib.shivi_
contents
where name not in ("flag_12month","hh_no");
quit;
%put &shivi_name.;
ods output "Parameter Estimates"=my_lib.reg_output;
proc reg data= my_lib.shivani ;
model flag_12month= &shivi_name. /vif;
run;
ods output close;
data my_lib.reg_output1;
set my_lib.reg_output;
keep variable VarianceInflation;
where variable ne "Intercept";

if VarianceInflation=. then VarianceInflation=99999999;


run;
proc sort data= my_lib.reg_output1;
by descending VarianceInflation;
run;
data my_lib.reg_output2;
set my_lib.reg_output1;
length=length(variable);
sub_name = substr(variable,10,length);
run;
data my_lib.sample;
set my_lib.reg_output2;
run;
proc sql;
select sub_name into: top_name1 separated by " " from my_lib.sam
ple;
quit;
%put &top_name1.;
%do i= 1 %to 2;
%let x=%scan(&top_name1.,&i.," ");
%put &x.;
proc sql;
select distinct information_value into: iv_var separated
by " " from my_lib.char_num_iv
where varname="&x.";
quit;
%put &iv_var.;
data my_lib.sample;
set my_lib.sample;
if sub_name ="&x." then iv1= &iv_var.;
run;
%end;
data my_lib.sample2;
set my_lib.sample;
if _n_=1 then call symput("vif",VarianceInflation);
run;
%put &vif.;
/*******************************FOR VIF GT 3****************************
****/
%if %sysfunc(int(&vif.)) ge 3 %then
%do;
data my_lib.sample1;
set my_lib.sample;
row =_n_;

retain var p;
if _n_=1 then do;
var=variable;
P=iv1;
end;
if _n_=2 then do;
if P gt iv1 then drop_var1=variable;
else
drop_var1= var;
end;
run;
%end;
%else %do;
%let test_macro = 0;
%end;
proc sql;
select drop_var1 into: drop_var1 separated by " " from my_lib.s
ample1
where drop_var1 ne " ";
quit;
%put &drop_var1.;
data my_lib.shivani;
set my_lib.shivani;
drop &drop_var1.;
run ;
%end;
%mend;
%reg();
ple;
row =_n_;
retain var p;
if _n_=1 then do;
var=variable;
P=iv1;
end;
if _n_=2 then do;
if P gt iv1 then drop_var1=variable;
else
drop_var1= var;
end;
run;
%end;
%else %do;
%let test_macro = 0;
%end;
proc sql;
select drop_var1 into: drop_var1 separated by " " from my_lib.s
ample1
where drop_var1 ne " ";

quit;
%put &drop_var1.;
data my_lib.shivani;
set my_lib.shivani;
drop &drop_var1.;
run ;
%end;
%mend;
%reg();

Vous aimerez peut-être aussi