Help using Base SAS procedures

Proc Logistic - How to Pull Specific Statistical Values?

Accepted Solution Solved
Reply
Contributor
Posts: 59
Accepted Solution

Proc Logistic - How to Pull Specific Statistical Values?

 

Hello everyone,

 

I’m trying to pull “Stand Error”, “Gini” and “Roc” Values for more than one variable by using PROC LOGISTIC. Actually, I could pull them by the help of following code. At this point, I would like to ask that is there any method to pull this values without using much data steps.

 

My sample code as below;

 

Data Have;
Length Target 8 Variable2 8 Variable3 8 Variable4 8 ;
Infile Datalines Missover;
Input Target Variable2 Variable3 Variable4 ;
Datalines;
0 -0.435409602 0.1111702173 -0.375361259
0 -0.435409602 0.9767642068 -0.375361259
1 -0.435409602 0.9767642068 -0.375361259
0 -0.435409602 0.9767642068 -0.375361259
0  0.8432328141 0.9767642068 -0.566274869
1 -0.435409602 0.9767642068 0.5257570782
0 -0.202340531 0 0.5257570782
0 -0.435409602 0 0.5257570782
1 0.3610487663 -1.119484453 0.5257570782
1 0 0 0.1876969043
0 -0.435409602 -0.82913977 -0.566274869
0 -0.435409602 -0.82913977 0.1876969043
1 0.3610487663 0.9767642068 -0.199600942
0 0.8432328141 0 -0.199600942
0 -0.202340531 0.9767642068 -0.375361259
;
Run;

%Macro Fake_Table;
Data Result_Append;
Length Dataset $ 32 Variable $ 9 Variable2 8;
Run;
Proc Sql; Delete From Result_Append;
%Mend Fake_Table;


%Macro Test(Var);

Ods Graphics On; 
Ods Output ResponseProfile=Res_&Var. Association=Roc_&Var. ParameterEstimates=Err_&Var.;
PROC LOGISTIC DATA=Have NameLen=32 PLOTS(ONLY)=ALL;
MODEL Target (Event = '1')=&Var. /SELECTION=NONE LINK=LOGIT;
RUN;
QUIT;

Data Err2_&Var.(Keep=Variable StdErr Dataset Rename=(StdErr=Variable2));
Length Dataset $ 32;
Set Err_&Var.;
Where Variable="&Var.";
If Variable="&Var." then Variable="StdErr_";
Dataset="&Var.";
Run;

Data Roc2_&Var.(Keep=Label2 nValue2 Dataset Rename=(nValue2=Variable2 Label2=Variable));
Length Dataset $ 32;
Set Roc_&Var.;
IF Label2="Somers' D" Or Label2="c";
If Label2="c" then Label2="Roc_";
If Label2="Somers' D" then Label2="Gini_";
Dataset="&Var.";
Run;

PROC SQL;
Create Table Append_&Var. As 
Select * From Roc2_&Var.
Outer Union Corr 
Select * From Err2_&Var.;
QUIT;

PROC APPEND Base=Result_Append Data=Append_&Var.;
Run;
 
Ods Output Close; 
Ods Graphics Off;

%Mend Test;
%Let Variable=Variable2 Variable3 Variable4;
%Macro Test_Loop;
%let i=1;
%do %while(%scan(&Variable.,&i.,%str( ))~=);
%Test(%scan(&Variable.,&i.,%str( )));
%let i=&i.+1;
%end;
%mend;



%Fake_Table;
%Test_Loop;



 

 

Result_Append gives my desired output,

 

Thank you,


Accepted Solutions
Solution
‎06-28-2016 10:18 AM
SAS Super FREQ
Posts: 3,755

Re: Proc Logistic - How to Pull Specific Statistical Values?

I think your analysis will be cleaner and simpler if you convert the data from "Wide form" to "long form." That will enable you to use a BY statement, rather than a macro loop, to repeat the analysis for each model that has a single independent variable.  For example, try modifying something like this:

 

data Want;
set Have;
Group=1; X=Variable2; output;
Group=2; X=Variable3; output;
Group=3; X=Variable4; output;
drop Variable2-Variable4;
run;

proc sort data=Want; by Group; run;

PROC LOGISTIC DATA=Want NameLen=32  ...;
BY Group;
MODEL Target (Event = '1')=X / LINK=LOGIT;
RUN;

View solution in original post


All Replies
Solution
‎06-28-2016 10:18 AM
SAS Super FREQ
Posts: 3,755

Re: Proc Logistic - How to Pull Specific Statistical Values?

I think your analysis will be cleaner and simpler if you convert the data from "Wide form" to "long form." That will enable you to use a BY statement, rather than a macro loop, to repeat the analysis for each model that has a single independent variable.  For example, try modifying something like this:

 

data Want;
set Have;
Group=1; X=Variable2; output;
Group=2; X=Variable3; output;
Group=3; X=Variable4; output;
drop Variable2-Variable4;
run;

proc sort data=Want; by Group; run;

PROC LOGISTIC DATA=Want NameLen=32  ...;
BY Group;
MODEL Target (Event = '1')=X / LINK=LOGIT;
RUN;
Contributor
Posts: 59

Re: Proc Logistic - How to Pull Specific Statistical Values?

Hello @Rick_SAS,

 

Thank you for providing this sample code, I think it sould seem as below;

 

Ods Graphics On; 
Ods Output ResponseProfile=Res_ Association=Roc_ ParameterEstimates=Err_;

PROC LOGISTIC DATA=Want NameLen=32  PLOTS(ONLY)=ALL;
BY Group;
MODEL Target (Event = '1')=X / LINK=LOGIT;
RUN;

Ods Output Close; 
Ods Graphics Off;


Data Err2_ (Keep=Group Variable StdErr Dataset Rename=(StdErr=Variable2));
Length Dataset $ 32;
Set Err_;
Where Variable="X";
If Variable="X" then Variable="StdErr_";
Dataset="X";
Run;

Data Roc2_(Keep=Dataset Group Label2 nValue2  Rename=(nValue2=Variable2 Label2=Variable));
Length Dataset $ 32;
Set Roc_;
IF Label2="Somers' D" Or Label2="c";
If Label2="c" then Label2="Roc_";
If Label2="Somers' D" then Label2="Gini_";
Dataset="X";
Run;

PROC SQL;
Create Table Append_ As 
Select * From Roc2_
Outer Union Corr 
Select * From Err2_;
QUIT;

PROC SORT Data=Append_;
By Group;
Run;

 

By the way, when I first put my sample code, I didn't face an error but I re-wrote my previous sample code in my Pc,and now, I'm getting following errors, do you have an idea?


ERROR: File WORK.ERR_VARIABLE2.DATA does not exist.

ERROR: File WORK.ROC_VARIABLE2.DATA does not exist.

 

Thank you,

SAS Super FREQ
Posts: 3,755

Re: Proc Logistic - How to Pull Specific Statistical Values?

Regarding the 

ERROR: File WORK.ERR_VARIABLE2.DATA does not exist.

 

You must have code (not shown here) that is referencing that data set name. On one computer you were accessing a stale copy that was created earlier during development. Find out the new name of the data set that contains that info.

Contributor
Posts: 59

Re: Proc Logistic - How to Pull Specific Statistical Values?

@Rick_SAS,

 

It is little bir interesting, when I wrote the following code, Variable3 and Variable4 dataset is created, Variable2 is not created.

 

%Macro Test(Var);
 
Ods Graphics On; 
Ods Output ResponseProfile=Res_&Var. Association=Roc_&Var. ParameterEstimates=Err_&Var.;
PROC LOGISTIC DATA=Have NameLen=32 PLOTS(ONLY)=ALL;
MODEL Target (Event = '1')=&Var. /SELECTION=NONE LINK=LOGIT;
RUN;
QUIT;
 
%Mend Test;
 
%Macro Test_Loop;
%let i=1;
%do %while(%scan(&Variable.,&i.,%str( ))~=);
%Test(%scan(&Variable.,&i.,%str( )));
%let i=&i.+1;
%end;
%mend;
%Let Variable=Variable2 Variable3 Variable4;
 
%Test_Loop;
Contributor
Posts: 59

Re: Proc Logistic - How to Pull Specific Statistical Values?

Hi again @Ksharp and @Rick_SAS,

 

Can you give me a brief information about how can I solve my following errors.

 

I just don't understand. Macro resolves Variable3 and Variable4 but it doesn't resolve the Variable2

 

ERROR: File WORK.ERR_VARIABLE2.DATA does not exist.

ERROR: File WORK.ROC_VARIABLE2.DATA does not exist.

 

How can I solve the foregoing erros? 

Super User
Posts: 10,044

Re: Proc Logistic - How to Pull Specific Statistical Values?

ods output is a good way to go, also check some output option like :

PROC LOGISTIC DATA=sashelp.class NameLen=32 ;
MODEL sex(Event = 'F')=age height  / LINK=LOGIT outroc=roc influence;
RUN;


Contributor
Posts: 59

Re: Proc Logistic - How to Pull Specific Statistical Values?

@Ksharp,

 

Thank you but it sounds a little bit complicated. I just don't get which columns represents what?

 

Thank you,

☑ This topic is solved.

Need further help from the community? Please ask a new question.

Discussion stats
  • 7 replies
  • 297 views
  • 0 likes
  • 3 in conversation