Syntax Example for PROC MODEL

```/*--------------------------------------------------------------

SAS Sample Library

Name: modsy.sas
Description: Example program from SAS/ETS User's Guide,
The MODEL Procedure
Title: Syntax Example for PROC MODEL
Product: SAS/ETS Software
Keys: nonlinear simultaneous equation models
PROC: MODEL
Notes:

--------------------------------------------------------------*/

title 'Holzman Function (1969), Himmelblau No. 21, N=3';
data zero;
do i = 1 to 99;
output;
end;
run;

proc model data=zero;
parms x1= 100 x2= 12.5 x3=  3;
bounds .1 <= x1 <= 100,
0 <= x2 <=  25.6,
0 <= x3 <=   5;

t = 2 / 3;
u = 25 + (-50 * log(0.01 * i )) ** t;
v = (u - x2) ** x3;
w = exp(-v / x1);
eq.foo = -.01 * i + w;

fit foo / method=marquardt;
run;

title;

data d;
date = 0;
run;

proc model data=d;
endo x;
bounds x < 0;

eq.sqrt = x**2 - 4;

solve / optimize out=o;
run;

proc print data = o; run;

/*------ data set for fit task------ */
data a ;
do group = 1 to 3 ;
do i = 1 to 100 ;
x = normal(1);
y = 2 + 3*x + rannor(1) ;
output ;
end ;
end ;
run ;

/*------ data set for solve task------ */
data d ;
do group = 1 to 3 ;
x = normal(1) ;
output ;
end ;
run ;

/* ------  2 BY statements, one of them appear after SOLVE statement ------ */
proc model data = a ;
by group ;
y = a0 + a1*x ;
fit y / outest = b1 ;
solve y / data = d estdata = b1 out = c1 ;
by group ;
run;

proc print data = b1 ;run;
proc print data = c1 ; run;

/*------ 1 BY statement that appears before SOLVE statement------ */
proc model data = a ;
by group ;
y = a0 + a1*x ;
fit y / outest = b2 ;
solve y / data = d estdata = b2 out = c2 ;
run;

proc print data = b2 ; run;
proc print data = c2 ; run;

/*------ 1 BY statement that appears after SOLVE statement------*/
proc model data = a ;
y = a0 + a1*x ;
fit y / outest = b3 ;
solve y / data = d estdata = b3 out = c3 ;
by group ;
run;

proc print data = b3 ; run;
proc print data = c3 ; run;

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
;

title 'Segmented Model -- Quadratic with Plateau';
proc model data=a;

x0 = -.5 * b / c;

if x < x0 then y = a + b*x + c*x*x;
else           y = a + b*x0 + c*x0*x0;

fit y start=( a .45 b .5 c -.0025 );

estimate 'Join point' x0 ,
'plateau' a + b*x0 + c*x0**2 ;
run;

title;

data d;
do i = 0 to 1;
date=i;
if i = 0 then r = -1;
else          r = +1;
output;
end;
run;

proc model data=d ;
endo x y;

eq.a = x*x - 4;
eq.b = y*y - 9;

restrict x*y*r > 1;

solve /  optimize out=o outall;
quit;

proc print data = o; run;

```