The OPTMODEL Procedure |
This example demonstrates how to use the READ DATA statement to read parameters from a SAS data set. The objective is the Bard function, which is the following least-squares problem with :
data bard; input y @@; datalines; .14 .18 .22 .25 .29 .32 .35 .39 .37 .58 .73 .96 1.34 2.10 4.39 ; proc optmodel; set I = 1..15; number y{I}; read data bard into [_n_] y; number v{k in I} = 16 - k; number w{k in I} = min(k, v[k]); var x{1..3} init 1; min f = 0.5* sum{k in I} (y[k] - (x[1] + k / (v[k]*x[2] + w[k]*x[3])))**2; solve; print x; create data xdata from [i] xd=x;
In this code the values for parameter y are read from the BARD data set. The set I indexes the terms of the objective as well as the y array.
The code defines two utility parameters that contain coefficients used in the objective function. These coefficients could have been defined in the expression for the objective, f, but it was convenient to give them names and simplify the objective expression.
The result is shown in Output 6.2.1.
Output 6.2.1: Bard Function SolutionThe final CREATE DATA statement saves the solution values determined by the solver into the data set XDATA. The data set contains an observation for each x index. Each observation contains two variables. The output variable i contains the index, while xd contains the value for the indexed entry in the array x. The resulting data can be seen by using the PRINT procedure as follows:
proc print data=xdata; run;
The output from PROC PRINT is shown in Output 6.2.2.
Output 6.2.2: Output Data Set Contents
Copyright © 2008 by SAS Institute Inc., Cary, NC, USA. All rights reserved.