PROC OPTMODEL assigns a name to each table it creates. You can use these names to reference the table when you use the Output Delivery System (ODS) to select tables and create output data sets. The names of tables common to all solvers are listed in Table 5.10. Some solvers can generate additional tables; see the individual solver chapters for more information. For more information about ODS, see SAS Output Delivery System: User’s Guide.
Table 5.10: ODS Tables Produced in PROC OPTMODEL
ODS Table Name 
Description 
Statement/Option 
DerivMethods 
List of derivatives used by the solver, including the method of computation 

OptStatistics 
Solverdependent description of the resources required for solution, including function evaluations and solver time 

PrintTable 
Specified parameter or variable values 

ProblemSummary 
Description of objective, variables, and constraints 

SolutionSummary 
Overview of solution, including solverdependent solution quality values 

SolverOptions 
List of solver options and their values 

PerformanceInfo 
List of performance options and their values 

Timing 
Detailed solution timing 
PERFORMANCE / DETAILS 
To guarantee that ODS output data sets contain information from all executed statements, use the PERSIST= option in the ODS OUTPUT statement. For details, see SAS Output Delivery System: User's Guide. Note: The SUBMIT statement resets ODS SELECT and EXCLUDE lists.
Table 5.11 lists the variable names of the preceding tables used in the ODS template of the OPTMODEL procedure.
Table 5.11: Variable Names for the ODS Tables Produced in PROC OPTMODEL
ODS Table Name 
Variables 
DerivMethods 
Label, cValue, and nValue 
OptStatistics 
Label, cValue, and nValue 
PrintTable (matrix form) 
ROW, COL – COL 
PrintTable (table form) 
COL – COL, identifierexpression(_suffix) 
ProblemSummary 
Label, cValue, and nValue 
SolutionSummary 
Label, cValue, and nValue 
SolverOptions 
Label, cValue, nValue, cValue, and nValue 
PerformanceInfo 
Label, cValue, and nValue 
Timing 
Label, cValue, nValue, cValue, and nValue 
The PRINT statement produces an ODS table named PrintTable. The variable names that are used depend on the display format used. See the section Formatted Output for details about choosing the display format.
For the PRINT statement with table format, the columns that display array indices are named COL–COL, where is the number of index elements. Columns that display values from identifier expressions are named using the expression’s name and suffix. The identifier name becomes the output variable name if no suffix is used. Otherwise the variable name is formed by appending an underscore (_) and the suffix to the identifier name. Columns that display the value of expressions are named COL, where is the column number in the table.
For the PRINT statement with matrix format, the first column has the variable name ROW. The remaining columns are named COL–COL, where is the number of distinct column indices. When an ODS table displays values from identifier expressions, a label is generated based on the expression’s name and suffix, as described for column names in the case of table format.
The PRINTLEVEL= option controls the ODS tables produced by the SOLVE statement. When PRINTLEVEL=0, the SOLVE statement produces no ODS tables. When PRINTLEVEL=1, the SOLVE statement produces the ODS tables ProblemSummary, SolutionSummary, and PerformanceInfo. When PRINTLEVEL=2, the SOLVE statement produces the ODS tables ProblemSummary, SolverOptions, DerivMethods, SolutionSummary, OptStatistics, and PerformanceInfo.
The PERFORMANCE statement controls additional ODS tables that can be produced by the SOLVE statement. The PerformanceInfo table displays options that are controlled by the PERFORMANCE statement. If you specify the DETAILS option in the PERFORMANCE statement, then the SOLVE statement also produces the ODS table Timing.
The following statements generate several ODS tables and write each table to a SAS data set:
proc optmodel printlevel=2; ods output PrintTable=expt ProblemSummary=exps DerivMethods=exdm SolverOptions=exso SolutionSummary=exss OptStatistics=exos; var x{1..2} >= 0; min z = 2*x[1] + 3 * x[2] + x[1]**2 + 10*x[2]**2 + 2.5*x[1]*x[2] + x[1]**3; con c1: x[1]  x[2] <= 1; con c2: x[1] + 2*x[2] >= 100; solve; print x;
The data set expt
contains the PrintTable table and is shown in Figure 5.44. The variable names are COL and x.
The data set exps
contains the ProblemSummary table and is shown in Figure 5.45. The variable names are Label, cValue1, and nValue. The rows describe the objective function, variables, and constraints. The rows depend on the form of the problem.
Figure 5.45: ODS Table ProblemSummary
ProblemSummary 
Obs  Label1  cValue1  nValue1 

1  Objective Sense  Minimization  . 
2  Objective Function  z  . 
3  Objective Type  Nonlinear  . 
4  .  
5  Number of Variables  2  2.000000 
6  Bounded Above  0  0 
7  Bounded Below  2  2.000000 
8  Bounded Below and Above  0  0 
9  Free  0  0 
10  Fixed  0  0 
11  .  
12  Number of Constraints  2  2.000000 
13  Linear LE (<=)  1  1.000000 
14  Linear EQ (=)  0  0 
15  Linear GE (>=)  1  1.000000 
16  Linear Range  0  0 
The data set exso
contains the SolverOptions table and is shown in Figure 5.46. The variable names are Label, cValue, nValue, cValue, and nValue. The rows, which depend on the solver called by PROC OPTMODEL, list the values taken by each of the solver options. The presence
of an asterisk (*) next to an option indicates that a value has been specified for that option.
Figure 5.46: ODS Table SolverOptions
SolverOptions 
Obs  Label1  cValue1  nValue1  cValue2  nValue2 

1  ALGORITHM  INTERIORPOINT  .  .  
2  FEASTOL  1E6  0.000001000  .  
3  HESSTYPE  FULL  .  .  
4  IIS  OFF  .  .  
5  LOGFREQ  1  1.000000  .  
6  MAXITER  5000  5000.000000  .  
7  MAXTIME  I  I  .  
8  NOMULTISTART  .  .  
9  OBJLIMIT  1E20  1E20  .  
10  OPTTOL  1E6  0.000001000  .  
11  SOLTYPE  1  1.000000  .  
12  TIMETYPE  REAL  .  . 
The data set exdm
contains the DerivMethods table, which displays the methods of derivative computation, and is shown in Figure 5.47. The variable names are Label, cValue1, and nValue. The rows, which depend on the derivatives used by the solver, specify the method used to calculate each derivative.
Figure 5.47: ODS Table DerivMethods
DerivMethods 
Obs  Label1  cValue1  nValue1 

1  Objective Gradient  Analytic Formulas  . 
2  Objective Hessian  Analytic Formulas  . 
The data set exss
contains the SolutionSummary table and is shown in Figure 5.48. The variable names are Label, cValue1, and nValue. The rows give an overview of the solution, including the solver chosen, the objective value, and the solution status. Depending
on the values returned by the solver, the SolutionSummary table might also include some solution quality values such as optimality
error and infeasibility. The values in the SolutionSummary table appear in the _OROPTMODEL_ macro variable; each solver chapter
has a section that describes the solver’s contribution to this macro variable.
Figure 5.48: ODS Table SolutionSummary
SolutionSummary 
Obs  Label1  cValue1  nValue1 

1  Solver  NLP  . 
2  Algorithm  Interior Point  . 
3  Objective Function  z  . 
4  Solution Status  Optimal  . 
5  Objective Value  22623.347101  22623 
6  .  
7  Optimality Error  5E7  0.000000500 
8  Infeasibility  0  0 
9  .  
10  Iterations  5  5.000000 
11  Presolve Time  0.00  0 
12  Solution Time  0.01  0.014000 
The data set exos
contains the OptStatistics table, which displays the optimization statistics, and is shown in Figure 5.49. The variable names are Label, cValue1, and nValue. The rows, which depend on the solver called by PROC OPTMODEL, describe the amount of time and function evaluations used
by the solver.
Figure 5.49: ODS Table OptStatistics
OptStatistics 
Obs  Label1  cValue1  nValue1 

1  Function Evaluations  28  28.000000 
2  Gradient Evaluations  28  28.000000 
3  Hessian Evaluations  6  6.000000 
4  Problem Generation Time  0.00  0 
5  Code Generation Time  0.10  0.095000 
6  Presolve Time  0.00  0 
7  Solution Time  0.01  0.014000 
8  Total Time  0.18  0.182000 