Cusum and Standard Deviation Charts

/****************************************************************/
/*          S A S   S A M P L E   L I B R A R Y                 */
/*                                                              */
/*    NAME: CUSXS                                               */
/*   TITLE: Cusum and Standard Deviation Charts                 */
/* PRODUCT: QC                                                  */
/*  SYSTEM: ALL                                                 */
/*    KEYS: Cusum Charts, Shewhart Charts,                      */
/*   PROCS: CUSUM SHEWHART                                      */
/*    DATA:                                                     */
/*                                                              */
/* SUPPORT: saswgr                                              */
/*     REF: PROC CUSUM, XCHART Statement, Getting Started 1     */
/*                                                              */
/****************************************************************/

data Oil;
   label Hour = 'Hour';
   input Hour @;
   do i=1 to 4;
      input Weight @;
      output;
   end;
   drop i;
   datalines;
 1  8.024  8.135  8.151  8.065
 2  7.971  8.165  8.077  8.157
 3  8.125  8.031  8.198  8.050
 4  8.123  8.107  8.154  8.095
 5  8.068  8.093  8.116  8.128
 6  8.177  8.011  8.102  8.030
 7  8.129  8.060  8.125  8.144
 8  8.072  8.010  8.097  8.153
 9  8.066  8.067  8.055  8.059
10  8.089  8.064  8.170  8.086
11  8.058  8.098  8.114  8.156
12  8.147  8.116  8.116  8.018
;



proc cusum data=Oil;
   xchart Weight*Hour /
      nochart
      mu0=8.100        /* target mean for process  */
      sigma0=0.050     /* known standard deviation */
      delta=-1         /* shift to be detected     */
      h=3              /* cusum parameter h        */
      k=0.5            /* cusum parameter k        */
      scheme=onesided
      outtable = Tabcusum
         ( drop   = _var_ _subn_ _subx_ _exlim_
           rename = ( _cusum_ = _subx_ _h_ = _uclx_ ) )
      ;
run;

proc shewhart data=Oil;
   xschart Weight*Hour /
      nochart
      outtable = Tabxscht
         ( drop = _subx_  _uclx_ );
run;

data taball;
   merge Tabxscht Tabcusum; by Hour;
   _mean_ = _uclx_ * 0.5;
   _lclx_ = 0.0;
run;

title;
proc print data=taball;
run;

ods graphics on;
title 'Cusum Chart for Mean and s chart';
proc shewhart table=taball;
   xschart Weight * Hour /
      nolimitslegend
      ucllabel = 'h=3.0'
      odstitle = title
      markers
      noctl
      split = '/'
      nolegend ;
   label _subx_ = 'Lower Cusum/Std Dev';
run;