Analysis of Means for Proportions
/****************************************************************/
/* S A S S A M P L E L I B R A R Y */
/* */
/* NAME: ANOMP */
/* TITLE: Analysis of Means for Proportions */
/* PRODUCT: QC */
/* SYSTEM: ALL */
/* KEYS: ANOM, Analysis of Means, */
/* PROCS: PRINT SHEWHART */
/* DATA: */
/* */
/* REF: P. R. Nelson (1982), "Exact Critical Points for the */
/* Analysis of Means", Communications in Statistics, */
/* A11, 699-709 */
/* */
/* Robert N. Rodriguez (1996), "Health Care */
/* Applications of Statistical Process Control: */
/* Examples Using the SAS System", Proceedings of the */
/* Twenty-First Annual SAS Users Group International */
/* Conference, 1381-1396 */
/* */
/* NOTES: This sample program uses the anomsig macro defined */
/* in the ANOMSIG sample program. The statements in */
/* that program must be submitted before this program. */
/* */
/****************************************************************/
options ls=64 nodate nonumber;
goptions htext= 3.5 pct htitle=4.0 pct
ftext='albany amt';
%let symht=2.4pct;
%annomac;
data csection;
length id $ 2;
input id csect94 vag94 csect95 vag95;
total94 = csect94 + vag94;
total95 = csect95 + vag95;
label id = 'Medical Group Identification Number';
cards;
1A 163 907 150 773
1K 55 314 45 253
1B 52 179 34 136
1D 19 128 18 114
3I 21 98 20 86
3M 15 81 12 93
1E 15 52 10 67
1N 6 43 19 55
1Q 12 67 7 62
3H 7 65 11 54
1R 4 43 11 38
1H 5 32 9 39
3J 7 12 7 13
1C 13 42 8 35
3B 3 33 6 37
1M 6 8 4 25
3C 6 27 5 23
1O 8 26 4 23
1J 6 18 6 16
1T 1 3 3 19
3E 2 12 4 14
1G 1 7 4 11
3D 7 22 4 9
3G 2 5 1 10
1L 2 4 2 8
1I 1 3 1 7
1P 16 65 0 3
1F 0 1 0 3
1S 1 2 1 2
;
title 'Cesarean Sections for Medical Groups';
proc print data=csection noobs;
var id csect94 total94 csect95 total95;
run;
data csect94;
set csection end=eof;
if eof then call symput('ngroups', left( put( _n_, 4. )));
rate94 = csect94 / total94;
run;
data csect94;
set csect94;
%dclanno;
%sequence(after);
%system(2,2,3);
function = 'symbol';
xc = id;
y = rate94;
size = 2.4;
color = 'yellow';
text = 'circle';
run;
%anomsig( 0.01, &ngroups );
title 'Proportion of C-Sections in 1995';
symbol v=none w=7;
proc shewhart data=csection;
pchart csect95*id /
subgroupn = total95
cframe = blue
sigmas = &sigmult
cneedles = yellow
haxis = axis1
lcllabel = 'LDL'
ucllabel = 'UDL'
nolegend
turnhlabels;
axis1 value = ( h=2.2 pct ) ;
label csect95 = 'Proportion of Cesarean Sections';
run;
%anomsig( 0.01, &ngroups );
title 'Proportion of C-Sections:'
' 1994 and 1995';
symbol v=dot c=black h=&symht;
proc shewhart data=csection;
pchart csect95*id / subgroupn=total95
cframe = ligr
noconnect
turnhlabels
nolegend
anno = csect94
lcllabel = 'LDL'
ucllabel = 'UDL'
haxis = axis1
sigmas=&sigmult;
axis1 value = ( h=2.2 pct ) ;
label csect95 = 'Proportion of Cesarean Sections';
footnote j=l ' Empty Circles Indicate 1994 Rates';
run;
footnote;
/* Stacked Charts */
%anomsig( 0.01, &ngroups );
proc shewhart data=csection;
pchart csect94*id /
subgroupn = total94
sigmas = &sigmult
outtable = cstab94
(rename = ( _lclp_ = _lclx_
_subp_ = _subx_
_p_ = _mean_
_uclp_ = _uclx_ ))
nochart;
proc shewhart data=csection;
pchart csect95*id /
subgroupn=total95
sigmas =&sigmult
outtable =cstab95
(rename = ( _lclp_ = _lclr_
_subp_ = _subr_
_p_ = _r_
_uclp_ = _uclr_
_exlim_ = _exlimr_)
drop = _var_ _limitn_
_subn_ _sigmas_ )
nochart;
data cstab;
merge cstab94 cstab95;
if _subn_ = 1 then _subr_ = . ;
run;
proc print data=cstab;
run;
title 'C-Section Rates for 1994 and 1995';
symbol v=none w=7;
proc shewhart table=cstab;
xrchart csect94 *id /
cneedles = black
cinfill = ligr
cframe = yellow
split = '/'
ypct1 = 50
xsymbol = 'Avg'
rsymbol = 'Avg'
lcllabel = 'LDL'
ucllabel = 'UDL'
lcllabel2 = 'LDL'
ucllabel2 = 'LDL'
haxis = axis1
turnhlabel
nolimitsleg
nolegend ;
axis1 value = ( h=2.2 pct ) ;
label _subx_ = '1994 Proportion/1995 Proportion';
run;