1. This is dataplot macro   computelabstats.dp    (yz,labz)
2. Purpose: For a given radionulcide (radionulcide jrn), compute global and lab stats
3. Note: this macro is usually called within a (jrn) loop
4. Date: 9/26/12 => 8/1/18
5.
6. Input (3):
7.   yz        (vector)    = responses for all labs
8.   labz      (vector)    = lab ID (coded or uncoded, sorted or unsorted--as done before)
9.   decplace  (parameter) = number of decimal places for rounding (optional)
10.
11. Output (16):
12.   nv       (vector)    = number of observations per lab
13.   ybarv    (vector)    = lab means                    (= within-lab means)
14.   sdv      (vector)    = lab data standard deviations (= within-lab SDs)
15.   sdmv     (vector)    = lab means standard deviations
16.   labv     (vector)    = coded lab IDs (1, 2, . . .)
17.   sdvp     (vector)    = adjusted lab standard deviations (where if ni = 1, then sdi  ==> sdpool)
18.   sdmvp    (vector)    = adjusted lab mean SDs            (where if ni = 1, then sdmi ==> sdpool)
19.   zv       (vector)    = standardized lab means (= ybarv - mmean) / sdmean
20.   .
21.   numlab    (parameter) = number of labs
22.   n         (parameter) = number of observations in y
23.   mmean     (parameter) = mean of lab means
24.   mmeanr    (parameter) = rounded mean of lab means
25.   medmean   (parameter) = median of lab means
26.   medmeanr  (parameter) = rounded median of lab means
27.   sdmean    (parameter) = SD of the lab means
28.   sdb       (parameter) = SD of the lab means (is identical to sdmean)
29.   sdpool    (parameter) = pooled standard deviation = replication SD from ANOVA
30.
31. -----start point-----
32.
33. -----Step 1: Check input arguments-----
34.
35let string stmacro = computelabstats.dp
36let string stall = yz labz
37call checkinput.dp
38.
39. -----Step 2: Compute within-lab statistics-----
40.
41delete dlabz; let dlabz = distinct labz
42let numlab = number dlabz
43let n = number yz
44.
45delete nv ybarv sdv labv sdmv
46loop for j = 1 1 numlab
47   let jorig = dlabz(j)
48   let string qzz = subset labz jorig
49   let nv(j) = number yz ^qzz
50   let ybarv(j) = mean yz ^qzz
51   let ni = nv(j)
52   let sdv(j) = 0
53   if ni >= 1; let sdv(j) = sd yz ^qzz; end if
54   let labv(j) = j
55end loop
56let sdmv = sdv/sqrt(nv)
57.
58. -----Step 3: Treat the special case for sd(mean) when a lab only has a single observation-----
59.
60. print "---computelabstats.dp: at start of step 3 (pre-anova)---"
61. pause
62.
63printing off
64delete sdvp sdmvp
65if numlab = 1; let sdvp = sdv for i = 1 1 1; end if
66if numlab >= 2
67   anova yz labz
68   let sdpool = ressd
69   . print "sdpool = ^sdpool"
70   .
71   delete sdvp sdmvp
72   let sdvp = sdv
73   let sdmvp = sdmv
74   . print sdvp sdmvp nv
75   . pause
76   .
77   let nvmin = minimum nv
78   if nvmin <= 1
79      let sdvp = sdpool subset nv 1
80      let sdmvp = sdpool subset nv 1
81   end if
82end if
83.
84. -----Step 4: Compute global statistics-----
85.
86   let dpz = 4
87   if decplace exists; let dpz = decplace; end if
88   .
89   let mmean = mean ybarv
90   let mmeanr = round(mmean,dpz)
91   .
92   let medmean = median ybarv
93   let medmeanr = round(medmean,dpz)
94   .
95if numlab >= 2
96   let sdmean = sd ybarv
97   . print ybarv
98   . pause
99   let sdmeanr = round(sdmean,dpz)
100   let sdb = sdmean
101   let sdbr = sdmeanr
102end if
103.
104. -----Step 5: Compute standardized deviates-----
105.
106if numlab >= 2
107   delete zv
108   set write decimals 6
109   let zv = (ybarv-mmean)/sdmean
110   . print nv ybarv zv
111   . pause
112end if
113