Upper and Lower One-Sided Cusum Charts
/****************************************************************/
/* S A S S A M P L E L I B R A R Y */
/* */
/* NAME: CUSUPLO */
/* TITLE: Upper and Lower One-Sided Cusum Charts */
/* PRODUCT: QC */
/* SYSTEM: ALL */
/* KEYS: Cusum 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 = tabupper
( drop = _subx_ _subs_ _exlim_
rename = ( _cusum_ = _subx_ _h_ = _uclx_ ) )
;
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 = tablower
( drop = _var_ _subn_ _subx_ _subs_ _exlim_
rename = ( _cusum_ = _subs_ _h_ = _ucls_ ) )
;
run;
data Tabboth;
merge tabupper tablower; by Hour;
_mean_ = _uclx_ * 0.5;
_s_ = _ucls_ * 0.5;
_lclx_ = 0.0;
_lcls_ = 0.0;
run;
ods graphics on;
title 'Upper and Lower Cusums';
proc shewhart table=Tabboth;
xschart Weight * Hour /
nolimitslegend
markers
odstitle = title
ucllabel = 'h=3.0'
ucllabel2 = 'h=3.0'
ypct1 = 50
vref = 1 2
vref2 = 1 2
noctl
noctl2
split = '/'
nolegend ;
label _subx_ = 'Upper Sum/Lower Sum';
run;