Example 12 for PROC LOGISTIC

/****************************************************************/
/*          S A S   S A M P L E   L I B R A R Y                 */
/*                                                              */
/*    NAME: LOGIEX12                                            */
/*   TITLE: Example 12 for PROC LOGISTIC                        */
/* PRODUCT: STAT                                                */
/*  SYSTEM: ALL                                                 */
/*    KEYS: logistic regression analysis,                       */
/*          exact conditional logistic regression analysis,     */
/*   PROCS: LOGISTIC                                            */
/*    DATA:                                                     */
/*                                                              */
/* SUPPORT: Bob Derr                                            */
/*     REF: SAS/STAT User's Guide, PROC LOGISTIC chapter        */
/*    MISC:                                                     */
/*                                                              */
/****************************************************************/

/*****************************************************************
Example 12. Exact Conditional Logistic Regression
****************************************************************/

/* Exact conditional logistic regression is a method that
addresses issues of separability and small sample sizes.

This example from Hand (1994) uses exact conditional logistic
regression to analyze a data set that has quasi-complete
separation.  The resulting exact parameter estimates are used to
predict the success probabilities of the subjects.*/

title 'Example 12. Exact Conditional Logistic Regression';

data one;
   length Diagnosis $ 9;
   input Diagnosis $ Friendships $ Recovered Total @@;
   datalines;
Anxious   Poor 0 0    Anxious   Good 13 21
Depressed Poor 0 8    Depressed Good 15 20
;

proc logistic data=one;
   class Diagnosis Friendships / param=ref;
   model Recovered/Total = Diagnosis Friendships;
run;

proc logistic data=one exactonly;
   class Diagnosis Friendships / param=ref;
   model Recovered/Total = Diagnosis Friendships;
   exact Diagnosis Friendships
       / outdist=dist joint estimate;
run;

proc print data=dist(obs=10);
run;

proc print data=dist(firstobs=162 obs=175);
run;

proc print data=dist(firstobs=176 obs=184);
run;

proc logistic data=one exactonly outest=est;
   class Diagnosis Friendships / param=ref;
   model Recovered/Total = Diagnosis Friendships;
   exact Intercept Diagnosis Friendships / estimate;
run;
proc means data=est noprint;
   output out=out;
run;
data out; set out; if _STAT_='MEAN'; drop _TYPE_; run;
data est(type=est); set out; _TYPE_='PARMS'; run;

proc logistic data=one inest=est;
   class Diagnosis Friendships / param=ref;
   model Recovered/Total = Diagnosis Friendships / maxiter=0;
   score out=score;
run;

proc print data=score;
   var Diagnosis Friendships P_Event;
run;