Example 20.4 Creating an Output Data Set from an ODS Table

In this example, the GENMOD procedure is used to perform Poisson regression, and part of the resulting procedure output is written to a SAS data set with the ODS OUTPUT statement. Insurance claims data are classified by two factors: age group (with two levels) and car type (with three levels). The following statements create the data set Insure:

title 'Insurance Claims';

data Insure;
   input n c Car $ Age;
   ln = log(n);
   datalines;
 500   42  Small  1
1200   37  Medium 1
 100    1  Large  1
 400  101  Small  2
 500   73  Medium 2
 300   14  Large  2
;

The variable n represents the number of insurance policyholders, and the variable c represents the number of insurance claims. The variable Car represents the type of car involved (classified into three groups), and the variable Age is the age of a policyholder (classified into two groups).

You can use PROC GENMOD to perform a Poisson regression analysis of these data with a log link function. Assume that the number-of-claims variable, c, has a Poisson probability distribution and the log of its mean, , is related to the factors Car and Age.

The following statements obtain the names of the tables produced by this PROC GENMOD run. The ODS TRACE statement lists the trace record. If you already know the names, such as by looking them up in the procedure documentation, you do not have to run this step. The following step displays the trace information:

ods trace on;

proc genmod data=insure;
   class car age;
   model c = car age / dist=poisson link=log offset=ln obstats;
run;

ods trace off;

The trace record from the SAS log is displayed next:

   Output Added:
   -------------
   Name:       ModelInfo
   Label:      Model Information
   Template:   Stat.Genmod.ModelInfo
   Path:       Genmod.ModelInfo
   -------------

   Output Added:
   -------------
   Name:       NObs
   Label:      Number of observations summary
   Template:   Stat.Genmod.NObs
   Path:       Genmod.NObs
   -------------

   Output Added:
   -------------
   Name:       ClassLevels
   Label:      Class Level Information
   Template:   Stat.Genmod.Classlevels
   Path:       Genmod.ClassLevels
   -------------


   Output Added:
   -------------
   Name:       ParmInfo
   Label:      Parameter Information
   Template:   Stat.Genmod.Parminfo
   Path:       Genmod.ParmInfo
   -------------

   Output Added:
   -------------
   Name:       ModelFit
   Label:      Criteria For Assessing Goodness Of Fit
   Template:   stat.genmod.ModelFit
   Path:       Genmod.ModelFit
   -------------

   Output Added:
   -------------
   Name:       ConvergenceStatus
   Label:      Convergence Status
   Template:   Stat.Genmod.ConvergenceStatus
   Path:       Genmod.ConvergenceStatus
   -------------

   Output Added:
   -------------
   Name:       ParameterEstimates
   Label:      Analysis Of Parameter Estimates
   Template:   stat.genmod.parameterestimates
   Path:       Genmod.ParameterEstimates
   -------------

   Output Added:
   -------------
   Name:       ObStats
   Label:      Observation Statistics
   Template:   Stat.Genmod.Obstats
   Path:       Genmod.ObStats
   -------------

In the following step, no output is displayed because the ODS SELECT NONE statement is included. The ODS OUTPUT statement writes the ODS table ObStats to a SAS data set named myObStats. All of the usual data set options, such as the KEEP= or RENAME= option, can be used in the ODS OUTPUT statement. Thus, to create the myObStats data set so that it contains only certain columns from the ObStats table, you can use the data set options as follows:

ods select none;
proc genmod data=insure;
   class car age;
   model c = car age / dist=poisson link=log offset=ln obstats;
   ods output ObStats=myObStats(keep=car age pred
                                rename=(pred=PredictedValue));
run;

The KEEP= data set option in the ODS OUTPUT statement specifies that only the variables Car, Age, and Pred are written to the data set. The RENAME= data set option changes the name of variable Pred to PredictedValue. The following statements sort the output data set myObStats, select all output, and produce Output 20.4.1:

proc sort data=myObStats;
   by descending PredictedValue;
run;

ods select all;
proc print data=myObStats noobs;
   title2 'Values of Car, Age, and the Predicted Values';
run;

The ODS SELECT NONE statement remains in effect until it is explicitly canceled (for example, with the ODS SELECT ALL statement).

Output 20.4.1 The ObStats Table Created as a SAS Data Set
Insurance Claims
Values of Car, Age, and the Predicted Values

Car Age PredictedValue
Small 2 107.2011
Medium 2 67.025444
Medium 1 42.974556
Small 1 35.798902
Large 2 13.773459
Large 1 1.2265414