Programming Language Example for PROC MODEL
/*--------------------------------------------------------------
SAS Sample Library
Name: modpl.sas
Description: Example program from SAS/ETS User's Guide,
The MODEL Procedure
Title: Programming Language Example for PROC MODEL
Product: SAS/ETS Software
Keys: nonlinear simultaneous equation models
PROC: MODEL
Notes:
--------------------------------------------------------------*/
/*--- Examples from the Programming Language Section of the
MODEL Procedure ---*/
title 'Equations Translation in PROC MODEL';
/*--- Equation Translations ---*/
data line;
do t = 1 to 20;
x = 5 * ranuni(1234);
x1 = x;
x2 = x*x;
y = 10 + 2 * x;
output;
end;
run;
proc model data=line list;
y = a1 + b1*x1 + c1*x2;
fit y;
run;
proc model data=line ;
y = a1 + b1**2 *x1 + c1*x2;
Dy_a1 = getder(PRED.y,a1);
Dy_b1 = getder(PRED.y,b1);
Dy_c1 = getder(PRED.y,c1);
outvars Dy_a1 Dy_b1 Dy_c1;
fit y / out=grad;
run;
/*--- Diagnostics and Debugging ---*/
*---------Fitting a Segmented Model using MODEL----*
| | |
| y | quadratic plateau |
| | y=a+b*x+c*x*x y=p |
| | ..................... |
| | . : |
| | . : |
| | . : |
| | . : |
| | . : |
| +-----------------------------------------X |
| x0 |
| |
| continuity restriction: p=a+b*x0+c*x0**2 |
| smoothness restriction: 0=b+2*c*x0 so x0=-b/(2*c)|
*--------------------------------------------------*;
title 'QUADRATIC MODEL WITH PLATEAU';
data a;
input y x @@;
datalines;
.46 1 .47 2 .57 3 .61 4 .62 5 .68 6 .69 7
.78 8 .70 9 .74 10 .77 11 .78 12 .74 13 .80 13
.80 15 .78 16
;
proc model data=a list xref listcode;
parms a 0.45 b 0.5 c -0.0025;
x0 = -.5*b / c; /* join point */
if x < x0 then /* Quadratic part of model */
y = a + b*x + c*x*x;
else /* Plateau part of model */
y = a + b*x0 + c*x0*x0;
fit y;
run;
title;