Spring and Damper Continuous System

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

                    SAS Sample Library

        Name: modex07.sas
 Description: Example program from SAS/ETS User's Guide,
              The MODEL Procedure
       Title: Spring and Damper Continuous System
     Product: SAS/ETS Software
        Keys: nonlinear simultaneous equation models
        PROC: MODEL
       Notes:

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

title1 'Simulation of Spring-Mass-Damper System';

/*- Data to drive the simulation time periods ---*/
data one;
   do n=1 to 100;
      output;
   end;
run;

proc model data=one outmodel=spring;
   var      force -200  disp  10  vel  0  accel -20  time 0;
   control  mass   9.2  c    1.5  dt  .1  k      20;
   force = -k * disp -c * vel;
   disp  = lag(disp) + vel * dt;
   vel   = lag(vel) + accel * dt;
   accel = force / mass;
   time  = lag(time) + dt;
run;

proc model data=one model=spring;
   title2 "Simulation of the model for the base case";
   control run '1';
   solve / out=a;
run;

   title2 "Simulation of the model with twice the initial displacement";
   control run '2';
   var disp 20;
   solve / out=b;
run;

data two;
   do time = 0 to 10 by .2; output;end;
run;

title2 "Simulation of the model using the dert. syntax";
proc model data=two;
   var      force -200  disp  10  vel  0  accel -20  time 0;
   control  mass   9.2  c    1.5  dt  .1  k      20;
   control run '3' ;
   force = -k * disp -c * vel;
   dert.disp  = vel ;
   dert.vel   = accel;
   accel = force / mass;
   solve / out=c;
   id time ;
run;

data p;
   set a b c;
run;

title2 'Overlay Plot of All Three Simulations';
proc sgplot data=p;
   series x=time y=disp / group=run lineattrs=(pattern=1);
   xaxis values=(0 to 10 by 1);
   yaxis values=(-20 to 20 by 10);
run;