Many SAS statistical procedures cannot do regression with constrains. For example, a spline regression with unknown location of a knot.
The regression lines(two lines) will be
y=b0+b1*x for x<=xz;
y=bb0+bb1*x for x>=xz;
suject to: b0+b1*xz=bb0+bb1*xz
Here b0 b1 xz bb0 bb1 are all unknown parameters.
In proc optmodel, the constrain can be easily incorporated. See example below.
%let n=200;
data t1;
do i=1 to &n;
x=ranuni(1230)*4;
x=sign(x)*x;
y=1+1*x*x+rannor(123);
x0=1;
output;
end;
keep y x x0;
run;
proc reg data=t1;
model y=x;
run;
quit;
proc optmodel;
set I = 1 .. &n;
number y{I};
number x{I};
number x0{I};
read data t1 into [_n_] y x x0;
var b0, b1;
min f =
sum{k in I}
( y[k] - (b0*x0[k] + b1*x[k]))**2;
reset printlevel=2;
solve with nlp;
solve with qp;
print f b0 b1;
quit;
proc optmodel;
set I = 1 .. &n;
number y{I};
number x{I};
number x0{I};
read data t1 into [_n_] y x x0;
var b0, b1 , xz, bb0, bb1;
min f =sum{k in I} ( ( x[k]< xz )* ( y[k] - (b0*x0[k] + b1*x[k]))**2
+ ( x[k]>= xz )* ( y[k] - (bb0*x0[k] + bb1*x[k]))**2 );
con coef: b0+b1*xz=bb0+bb1*xz;
reset printlevel=2;
solve with nlp;
print f b0 b1 xz bb0 bb1;
quit;