// COMPARE prefab
// (c) 2004 Stephen C. Grubb
//
// 2 July 2004 - added ptselect, ptselect2..4 and ptselecttags..
// this allows one field to be used for y, y2, y3, etc.. with different sets of rows selected
// in the code, requires tagging the fieldname with an additional tag symbolizing the select.
//
#musthave y catfields
#set catfields = $change( " ", ",", @catfields )
#set nbf = $count( "*", @catfields )
#set catf = $nmember( 1, @catfields )
#if @nbf = 2
#set subcatf = $nmember( 2, @catfields )
#endif
#set catfields = $change( ",", " ", @catfields )
#set tmpstats = $tmpfilename( pf_compare )
#setifnotgiven color = orange
#setifnotgiven color2 = powderblue
#setifnotgiven color3 = green
#setifnotgiven color4 = dullyellow
#setifnotgiven y2 = ""
#setifnotgiven y3 = ""
#setifnotgiven y4 = ""
#setifnotgiven outline = no
#if @CM_UNITS = 1
#setifnotgiven errwidth = 0.17
#setifnotgiven barwidth = 0.17
#setifnotgiven clustersep = 0.04
#else
#setifnotgiven errwidth = 0.05
#setifnotgiven barwidth = 0.05
#setifnotgiven clustersep = 0.012
#endif
#setifnotgiven legend = "min+0.5 max+0.5"
#setifnotgiven erroneway = no
#setifnotgiven subgroupoffset = 0.4
#setifnotgiven crossover = ""
#setifnotgiven dataoutfile = ""
// ptselect .......
#setifnotgiven ptselecttags = ""
#if @ptselecttags != ""
#set pttag1 = $nmember( 1, @ptselecttags )
#set pttag2 = $nmember( 2, @ptselecttags )
#set pttag3 = $nmember( 3, @ptselecttags )
#set pttag4 = $nmember( 4, @ptselecttags )
#else
#set pttag1 = ""
#set pttag2 = ""
#set pttag3 = ""
#set pttag4 = ""
#endif
#if $def(ptselect) = 1 && @ptselecttags = ""
#write stderr
Error: if ptselect* is used, ptselecttags must also be specified.
#endwrite
#exit
#endif
#set subgroupoffset = $arith(@subgroupoffset/2.0)
#set nclust = 1
#setifnotgiven name = @y " " @pttag1
#if @y2 != ""
#set nclust = 2
#setifnotgiven name2 = @y2 " " @pttag2
#endif
#if @y3 != ""
#set nclust = 3
#setifnotgiven name3 = @y3 " " @pttag3
#endif
#if @y4 != ""
#set nclust = 4
#setifnotgiven name4 = @y4 " " @pttag4
#endif
//// load standard parms..
#include $chunk_setstd
//// read data..
#include $chunk_read
///////////////////////////////////////////
// compute means and SD for each group...
// and write this out to tmpstats file...
///////////////////////////////////////////
#loop
#proc processdata
action: breaks
fields: @catfields
#endproc
#if @NRECORDS = 0
#break
#endif
#setifnotgiven BREAKFIELD2 = ""
#proc rangebar
datafield: @y
#ifspec ptselect select
// compute means and sds only..
showbriefstats: only
briefstatstag: @BREAKFIELD1 @BREAKFIELD2 @y:@pttag1
showstatsfile: @tmpstats
skipmed: yes
#if @y2 != ""
#proc rangebar
datafield: @y2
#ifspec ptselect2 select
// compute means and sds only..
showbriefstats: only
briefstatstag: @BREAKFIELD1 @BREAKFIELD2 @y2:@pttag2
showstatsfile: @tmpstats
skipmed: yes
#endif
#if @y3 != ""
#proc rangebar
datafield: @y3
#ifspec ptselect3 select
// compute means and sds only..
showbriefstats: only
briefstatstag: @BREAKFIELD1 @BREAKFIELD2 @y3:@pttag3
showstatsfile: @tmpstats
#endif
#if @y4 != ""
#proc rangebar
datafield: @y4
#ifspec ptselect4 select
// compute means and sds only..
showbriefstats: only
briefstatstag: @BREAKFIELD1 @BREAKFIELD2 @y4:@pttag4
showstatsfile: @tmpstats
#endif
#proc usedata
original: yes
#endloop
/////////////////////////////////
// now read in the temp data file..
// and produce the plot..
/////////////////////////////////
#proc getdata
pathname: @tmpstats
#if @nbf = 1
fieldnames: @catf varfield foo n mean sd median min max missing
#elseif @nbf = 2
fieldnames: @catf subfield varfield foo n mean sd median min max missing
#endif
// showresults: yes
#endproc
//// plotting area..
#include $chunk_area
xscaletype: categories
xcategories: datafield=@catf
catcompmethod: exact
#if @yrange = ""
yautorange: datafields=mean,sd incmult=2.0 nearest=@ynearest
//#elseif @yrange = 0
#elseif $ntoken( 2, @yrange ) = ""
yautorange: datafields=mean,sd incmult=2.0 mininit=@yrange nearest=@ynearest
#else
yrange: @yrange
#endif
//// X axis..
#set xstubdet = @xstubdet " adjust=0,-0.1"
#include $chunk_xaxis
stubcull: yes
stubs: usecategories
tics: none
//// Y axis..
#include $chunk_yaxis
stubcull: yes
//// title..
#include $chunk_title
//// user pre-plot include..
#if @include1 != ""
#include @include1
#endif
#procdef bars
#saveas B
locfield: @catf
lenfield: mean
barwidth: @barwidth
color: @color
outline: @outline
clustersep: @clustersep
#ifspec crossover
#procdef bars
#saveas EB
locfield: @catf
lenfield: mean
#if @erroneway = yes
errbarfields: 0 sd
#else
errbarfields: sd sd
#endif
tails: @errwidth
barwidth: @barwidth
clustersep: @clustersep
#ifspec errline thinbarline
#if @nbf = 1
#proc bars
#clone B
cluster: 1 / @nclust
select: @@varfield = @y:@pttag1
legendlabel: @name
#proc bars
#clone EB
cluster: 1 / @nclust
select: @@varfield = @y:@pttag1
#if @y2 != ""
#proc bars
#clone B
cluster: 2 / @nclust
select: @@varfield = @y2:@pttag2
color: @color2
legendlabel: @name2
#proc bars
#clone EB
cluster: 2 / @nclust
select: @@varfield = @y2:@pttag2
#endif
#if @y3 != ""
#proc bars
#clone B
cluster: 3 / @nclust
select: @@varfield = @y3:@pttag3
color: @color3
legendlabel: @name3
#proc bars
#clone EB
cluster: 3 / @nclust
select: @@varfield = @y3:@pttag3
#endif
#if @y4 != ""
#proc bars
#clone B
cluster: 4 / @nclust
select: @@varfield = @y4:@pttag4
color: @color4
legendlabel: @name4
#proc bars
#clone EB
cluster: 4 / @nclust
select: @@varfield = @y4:@pttag4
#endif
#elseif @nbf = 2
////////// left side //////////
#proc categories
axis: x
slideamount: -@subgroupoffset
#proc scatterplot
ylocation: min-0.1
xfield: @catf
text: @leftsub
select: @@varfield = @y:@pttag1 && @subfield = @leftsub
#proc bars
#clone B
cluster: 1 / @nclust
select: @@varfield = @y:@pttag1 && @@subfield = @leftsub
legendlabel: @name
#proc bars
#clone EB
cluster: 1 / @nclust
select: @@varfield = @y:@pttag1 && @@subfield = @leftsub
#if @y2 != ""
#proc bars
#clone B
cluster: 2 / @nclust
select: @@varfield = @y2:@pttag2 && @@subfield = @leftsub
color: @color2
legendlabel: @name2
#proc bars
#clone EB
cluster: 2 / @nclust
select: @@varfield = @y2:@pttag2 && @@subfield = @leftsub
#endif
#if @y3 != ""
#proc bars
#clone B
cluster: 3 / @nclust
select: @@varfield = @y3:@pttag3 && @@subfield = @leftsub
color: @color3
legendlabel: @name3
#proc bars
#clone EB
cluster: 3 / @nclust
select: @@varfield = @y3:@pttag3 && @@subfield = @leftsub
#endif
#if @y4 != ""
#proc bars
#clone B
cluster: 4 / @nclust
select: @@varfield = @y4:pttag4 && @@subfield = @leftsub
color: @color4
legendlabel: @name4
#proc bars
#clone EB
cluster: 4 / @nclust
select: @@varfield = @y4:pttag4 && @@subfield = @leftsub
#endif
////////// right side //////////
#proc categories
axis: x
slideamount: @subgroupoffset
#proc scatterplot
ylocation: min-0.1
xfield: @catf
text: @rightsub
select: @@varfield = @y:@pttag1 && @subfield = @rightsub
#proc bars
#clone B
cluster: 1 / @nclust
select: @@varfield = @y:@pttag1 && @@subfield = @rightsub
#proc bars
#clone EB
cluster: 1 / @nclust
select: @@varfield = @y:@pttag1 && @@subfield = @rightsub
#if @y2 != ""
#proc bars
#clone B
cluster: 2 / @nclust
select: @@varfield = @y2:@pttag2 && @@subfield = @rightsub
color: @color2
#proc bars
#clone EB
cluster: 2 / @nclust
select: @@varfield = @y2:@pttag2 && @@subfield = @rightsub
#endif
#if @y3 != ""
#proc bars
#clone B
cluster: 3 / @nclust
select: @@varfield = @y3:@pttag3 && @@subfield = @rightsub
color: @color3
#proc bars
#clone EB
cluster: 3 / @nclust
select: @@varfield = @y3:@pttag3 && @@subfield = @rightsub
#endif
#if @y4 != ""
#proc bars
#clone B
cluster: 4 / @nclust
select: @@varfield = @y4:@pttag4 && @@subfield = @rightsub
color: @color4
#proc bars
#clone EB
cluster: 4 / @nclust
select: @@varfield = @y4:@pttag4 && @@subfield = @rightsub
#endif
#endif
#if @name != "#usefname" || @header = yes
#proc legend
location: @legend
#ifspec legendfmt format
#ifspec legendsep sep
#ifspec legwrap wraplen
#ifspec legbreak extent
#ifspec legtitle title
#ifspec legbox backcolor
#ifspec legframe frame
#ifspec legtextdet textdetails
#endif
#shell
#if @dataoutfile != ""
mv @tmpstats @dataoutfile
#else
// remove the tmp file
rm -f @tmpstats
#endif
#endshell
syntax highlighted by Code2HTML, v. 0.9.1