In the example described in the section An Unconstrained Optimization Example, all the numeric constants that describe the behavior of the objective function were specified directly in the objective expression. This is a valid way to formulate the objective expression. However, in many cases it is inconvenient to specify the numeric constants directly. Direct specification of numeric constants can also hide the structure of the problem that is being solved. The objective expression text would need to be modified when the numeric values in the problem change. This can be very inconvenient with large models.

In PROC OPTMODEL, you can create named numeric values that behave as constants in expressions. These named values are called
*parameters*. You can write an expression by using mnemonic parameter names in place of numeric literals. This produces a clearer formulation
of the optimization problem. You can easily modify the values of parameters, define them in terms of other parameters, or
read them from a SAS data set.

The model from this same example can be reformulated in a more general polynomial form, as follows:

data coeff; input c_xx c_x c_y c_xy c_yy; datalines; 1 -1 -2 -1 1 ; proc optmodel; var x, y; number c_xx, c_x, c_y, c_xy, c_yy; read data coeff into c_xx c_x c_y c_xy c_yy; min z=c_xx*x**2 + c_x*x + c_y*y + c_xy*x*y + c_yy*y**2; solve;

These statements read the coefficients from a data set, `COEFF`

. The NUMBER statement declares the parameters. The READ DATA statement reads the parameters from the data set. You can apply this model easily to coefficients that you have generated
by various means.