Fix oneway bug and add a test
[pspp] / tests / language / stats / oneway.at
index 2eeb22e843e65c84fd864d14091c93bde9b1d26f..e0f0ea30f3d49db27393412e3e90a5b1d8167fd7 100644 (file)
@@ -1,6 +1,23 @@
+dnl PSPP - a program for statistical analysis.
+dnl Copyright (C) 2017, 2020 Free Software Foundation, Inc.
+dnl
+dnl This program is free software: you can redistribute it and/or modify
+dnl it under the terms of the GNU General Public License as published by
+dnl the Free Software Foundation, either version 3 of the License, or
+dnl (at your option) any later version.
+dnl
+dnl This program is distributed in the hope that it will be useful,
+dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
+dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+dnl GNU General Public License for more details.
+dnl
+dnl You should have received a copy of the GNU General Public License
+dnl along with this program.  If not, see <http://www.gnu.org/licenses/>.
+dnl
 AT_BANNER([ONEWAY procedure])
 
 AT_SETUP([ONEWAY basic operation])
 AT_BANNER([ONEWAY procedure])
 
 AT_SETUP([ONEWAY basic operation])
+AT_KEYWORDS([categorical categoricals])
 AT_DATA([oneway.sps],
   [DATA LIST NOTABLE LIST /QUALITY * BRAND * .
 BEGIN DATA
 AT_DATA([oneway.sps],
   [DATA LIST NOTABLE LIST /QUALITY * BRAND * .
 BEGIN DATA
@@ -29,47 +46,49 @@ VALUE LABELS /brand 1 'Aspeger' 2 'Bloggs' 3 'Charlies'.
 ONEWAY
        quality BY brand
        /STATISTICS descriptives homogeneity
 ONEWAY
        quality BY brand
        /STATISTICS descriptives homogeneity
-       /CONTRAST =  -2 1 1 
+       /CONTRAST =  -2 1 1
        /CONTRAST = 0 -1 1
        .
 ])
 
        /CONTRAST = 0 -1 1
        .
 ])
 
-AT_CHECK([pspp -O format=csv oneway.sps], [0], 
-[Table: Descriptives
-,,,,,,95% Confidence Interval for Mean,,,
-,,N,Mean,Std. Deviation,Std. Error,Lower Bound,Upper Bound,Minimum,Maximum
+AT_CHECK([pspp -o pspp.csv -o pspp.txt oneway.sps])
+AT_CHECK([cat pspp.csv], [0], [dnl
+Table: Descriptives
+,,N,Mean,Std. Deviation,Std. Error,95% Confidence Interval for Mean,,Minimum,Maximum
+,Manufacturer,,,,,Lower Bound,Upper Bound,,
 Breaking Strain,Aspeger,5,2.20,1.30,.58,.58,3.82,1.00,4.00
 ,Bloggs,5,3.20,1.30,.58,1.58,4.82,2.00,5.00
 ,Charlies,5,5.00,1.58,.71,3.04,6.96,3.00,7.00
 ,Total,15,3.47,1.77,.46,2.49,4.45,1.00,7.00
 
 Table: Test of Homogeneity of Variances
 Breaking Strain,Aspeger,5,2.20,1.30,.58,.58,3.82,1.00,4.00
 ,Bloggs,5,3.20,1.30,.58,1.58,4.82,2.00,5.00
 ,Charlies,5,5.00,1.58,.71,3.04,6.96,3.00,7.00
 ,Total,15,3.47,1.77,.46,2.49,4.45,1.00,7.00
 
 Table: Test of Homogeneity of Variances
-,Levene Statistic,df1,df2,Significance
-Breaking Strain,.09,2,12,.91
+,Levene Statistic,df1,df2,Sig.
+Breaking Strain,.09,2,12,.913
 
 Table: ANOVA
 
 Table: ANOVA
-,,Sum of Squares,df,Mean Square,F,Significance
-Breaking Strain,Between Groups,20.13,2,10.07,5.12,.02
+,,Sum of Squares,df,Mean Square,F,Sig.
+Breaking Strain,Between Groups,20.13,2,10.07,5.12,.025
 ,Within Groups,23.60,12,1.97,,
 ,Total,43.73,14,,,
 
 Table: Contrast Coefficients
 ,Within Groups,23.60,12,1.97,,
 ,Total,43.73,14,,,
 
 Table: Contrast Coefficients
-,,Manufacturer,,
-,,Aspeger,Bloggs,Charlies
-Contrast,1,-2,1,1
-,2,0,-1,1
+,Manufacturer,,
+Contrast,Aspeger,Bloggs,Charlies
+1,-2,1,1
+2,0,-1,1
 
 Table: Contrast Tests
 ,,Contrast,Value of Contrast,Std. Error,t,df,Sig. (2-tailed)
 
 Table: Contrast Tests
 ,,Contrast,Value of Contrast,Std. Error,t,df,Sig. (2-tailed)
-Breaking Strain,Assume equal variances,1,3.80,1.54,2.47,12,.03
-,,2,1.80,.89,2.03,12,.07
-,Does not assume equal,1,3.80,1.48,2.56,8.74,.03
-,,2,1.80,.92,1.96,7.72,.09
+Breaking Strain,Assume equal variances,1,3.80,1.54,2.47,12.00,.029
+,,2,1.80,.89,2.03,12.00,.065
+,Does not assume equal variances,1,3.80,1.48,2.56,8.74,.031
+,,2,1.80,.92,1.96,7.72,.086
 ])
 AT_CLEANUP
 
 
 AT_SETUP([ONEWAY with splits])
 ])
 AT_CLEANUP
 
 
 AT_SETUP([ONEWAY with splits])
+AT_KEYWORDS([categorical categoricals])
 AT_DATA([oneway-splits.sps],
 [DATA LIST NOTABLE LIST /QUALITY * BRAND * S *.
 BEGIN DATA
 AT_DATA([oneway-splits.sps],
 [DATA LIST NOTABLE LIST /QUALITY * BRAND * S *.
 BEGIN DATA
@@ -105,78 +124,81 @@ ONEWAY
        .
 ])
 
        .
 ])
 
-AT_CHECK([pspp -O format=csv oneway-splits.sps], [0], 
-[Variable,Value,Label
-S,1.00,
+AT_CHECK([pspp -o pspp.csv -o pspp.txt oneway-splits.sps])
+AT_CHECK([cat pspp.csv], [0], [dnl
+Table: Split Values
+Variable,Value
+S,1.00
 
 Table: Descriptives
 
 Table: Descriptives
-,,,,,,95% Confidence Interval for Mean,,,
-,,N,Mean,Std. Deviation,Std. Error,Lower Bound,Upper Bound,Minimum,Maximum
+,,N,Mean,Std. Deviation,Std. Error,95% Confidence Interval for Mean,,Minimum,Maximum
+,Manufacturer,,,,,Lower Bound,Upper Bound,,
 Breaking Strain,Aspeger,5,2.20,1.30,.58,.58,3.82,1.00,4.00
 ,Bloggs,2,3.50,2.12,1.50,-15.56,22.56,2.00,5.00
 ,Total,7,2.57,1.51,.57,1.17,3.97,1.00,5.00
 
 Table: Test of Homogeneity of Variances
 Breaking Strain,Aspeger,5,2.20,1.30,.58,.58,3.82,1.00,4.00
 ,Bloggs,2,3.50,2.12,1.50,-15.56,22.56,2.00,5.00
 ,Total,7,2.57,1.51,.57,1.17,3.97,1.00,5.00
 
 Table: Test of Homogeneity of Variances
-,Levene Statistic,df1,df2,Significance
-Breaking Strain,1.09,1,5,.35
+,Levene Statistic,df1,df2,Sig.
+Breaking Strain,1.09,1,5,.345
 
 Table: ANOVA
 
 Table: ANOVA
-,,Sum of Squares,df,Mean Square,F,Significance
-Breaking Strain,Between Groups,2.41,1,2.41,1.07,.35
+,,Sum of Squares,df,Mean Square,F,Sig.
+Breaking Strain,Between Groups,2.41,1,2.41,1.07,.349
 ,Within Groups,11.30,5,2.26,,
 ,Total,13.71,6,,,
 
 Table: Contrast Coefficients
 ,Within Groups,11.30,5,2.26,,
 ,Total,13.71,6,,,
 
 Table: Contrast Coefficients
-,,Manufacturer,
-,,Aspeger,Bloggs
-Contrast,1,-2,2
-,2,-1,1
+,Manufacturer,
+Contrast,Aspeger,Bloggs
+1,-2,2
+2,-1,1
 
 Table: Contrast Tests
 ,,Contrast,Value of Contrast,Std. Error,t,df,Sig. (2-tailed)
 
 Table: Contrast Tests
 ,,Contrast,Value of Contrast,Std. Error,t,df,Sig. (2-tailed)
-Breaking Strain,Assume equal variances,1,2.60,2.52,1.03,5,.35
-,,2,1.30,1.26,1.03,5,.35
-,Does not assume equal,1,2.60,3.22,.81,1.32,.54
-,,2,1.30,1.61,.81,1.32,.54
+Breaking Strain,Assume equal variances,1,2.60,2.52,1.03,5.00,.349
+,,2,1.30,1.26,1.03,5.00,.349
+,Does not assume equal variances,1,2.60,3.22,.81,1.32,.539
+,,2,1.30,1.61,.81,1.32,.539
 
 
-Variable,Value,Label
-S,2.00,
+Table: Split Values
+Variable,Value
+S,2.00
 
 Table: Descriptives
 
 Table: Descriptives
-,,,,,,95% Confidence Interval for Mean,,,
-,,N,Mean,Std. Deviation,Std. Error,Lower Bound,Upper Bound,Minimum,Maximum
+,,N,Mean,Std. Deviation,Std. Error,95% Confidence Interval for Mean,,Minimum,Maximum
+,Manufacturer,,,,,Lower Bound,Upper Bound,,
 Breaking Strain,Bloggs,3,3.00,1.00,.58,.52,5.48,2.00,4.00
 ,Charlies,5,5.00,1.58,.71,3.04,6.96,3.00,7.00
 ,Total,8,4.25,1.67,.59,2.85,5.65,2.00,7.00
 
 Table: Test of Homogeneity of Variances
 Breaking Strain,Bloggs,3,3.00,1.00,.58,.52,5.48,2.00,4.00
 ,Charlies,5,5.00,1.58,.71,3.04,6.96,3.00,7.00
 ,Total,8,4.25,1.67,.59,2.85,5.65,2.00,7.00
 
 Table: Test of Homogeneity of Variances
-,Levene Statistic,df1,df2,Significance
-Breaking Strain,.92,1,6,.37
+,Levene Statistic,df1,df2,Sig.
+Breaking Strain,.92,1,6,.374
 
 Table: ANOVA
 
 Table: ANOVA
-,,Sum of Squares,df,Mean Square,F,Significance
-Breaking Strain,Between Groups,7.50,1,7.50,3.75,.10
+,,Sum of Squares,df,Mean Square,F,Sig.
+Breaking Strain,Between Groups,7.50,1,7.50,3.75,.101
 ,Within Groups,12.00,6,2.00,,
 ,Total,19.50,7,,,
 
 Table: Contrast Coefficients
 ,Within Groups,12.00,6,2.00,,
 ,Total,19.50,7,,,
 
 Table: Contrast Coefficients
-,,Manufacturer,
-,,Bloggs,Charlies
-Contrast,1,-2,2
-,2,-1,1
+,Manufacturer,
+Contrast,Bloggs,Charlies
+1,-2,2
+2,-1,1
 
 Table: Contrast Tests
 ,,Contrast,Value of Contrast,Std. Error,t,df,Sig. (2-tailed)
 
 Table: Contrast Tests
 ,,Contrast,Value of Contrast,Std. Error,t,df,Sig. (2-tailed)
-Breaking Strain,Assume equal variances,1,4.00,2.07,1.94,6,.10
-,,2,2.00,1.03,1.94,6,.10
-,Does not assume equal,1,4.00,1.83,2.19,5.88,.07
-,,2,2.00,.91,2.19,5.88,.07
+Breaking Strain,Assume equal variances,1,4.00,2.07,1.94,6.00,.101
+,,2,2.00,1.03,1.94,6.00,.101
+,Does not assume equal variances,1,4.00,1.83,2.19,5.88,.072
+,,2,2.00,.91,2.19,5.88,.072
 ])
 ])
-
 AT_CLEANUP
 
 
 AT_SETUP([ONEWAY with missing values])
 AT_CLEANUP
 
 
 AT_SETUP([ONEWAY with missing values])
+AT_KEYWORDS([categorical categoricals])
 dnl Check that missing are treated properly
 AT_DATA([oneway-missing1.sps],
 [DATA LIST NOTABLE LIST /v1 * v2 * dep * vn *.
 dnl Check that missing are treated properly
 AT_DATA([oneway-missing1.sps],
 [DATA LIST NOTABLE LIST /v1 * v2 * dep * vn *.
@@ -202,14 +224,14 @@ END DATA
 ONEWAY
        v1 v2 BY dep
        /STATISTICS descriptives homogeneity
 ONEWAY
        v1 v2 BY dep
        /STATISTICS descriptives homogeneity
-       /MISSING ANALYSIS 
+       /MISSING ANALYSIS
        .
 ])
 
 AT_DATA([oneway-missing2.sps],
 [DATA LIST NOTABLE LIST /v1 * v2 * dep * vn * .
 BEGIN DATA
        .
 ])
 
 AT_DATA([oneway-missing2.sps],
 [DATA LIST NOTABLE LIST /v1 * v2 * dep * vn * .
 BEGIN DATA
-4 .  1  2 
+4 .  1  2
 3 3  1  2
 2 2  1  2
 1 1  1  2
 3 3  1  2
 2 2  1  2
 1 1  1  2
@@ -246,7 +268,7 @@ dnl Now a test with missing values in the independent variable
 AT_DATA([oneway-missing3.sps],
 [DATA LIST NOTABLE LIST /v1 * v2 * dep * vn * .
 BEGIN DATA
 AT_DATA([oneway-missing3.sps],
 [DATA LIST NOTABLE LIST /v1 * v2 * dep * vn * .
 BEGIN DATA
-4 2  .  2 
+4 2  .  2
 3 3  1  2
 2 2  1  2
 1 1  1  2
 3 3  1  2
 2 2  1  2
 1 1  1  2
@@ -282,6 +304,7 @@ AT_CLEANUP
 
 
 AT_SETUP([ONEWAY descriptives subcommand])
 
 
 AT_SETUP([ONEWAY descriptives subcommand])
+AT_KEYWORDS([categorical categoricals])
 
 AT_DATA([oneway-descriptives.sps],
   [DATA LIST NOTABLE LIST /QUALITY * BRAND * .
 
 AT_DATA([oneway-descriptives.sps],
   [DATA LIST NOTABLE LIST /QUALITY * BRAND * .
@@ -310,18 +333,18 @@ ONEWAY
        .
 ])
 
        .
 ])
 
-AT_CHECK([pspp -O format=csv oneway-descriptives.sps], [0], 
+AT_CHECK([pspp -O format=csv oneway-descriptives.sps], [0],
 [Table: Descriptives
 [Table: Descriptives
-,,,,,,95% Confidence Interval for Mean,,,
-,,N,Mean,Std. Deviation,Std. Error,Lower Bound,Upper Bound,Minimum,Maximum
+,,N,Mean,Std. Deviation,Std. Error,95% Confidence Interval for Mean,,Minimum,Maximum
+,BRAND,,,,,Lower Bound,Upper Bound,,
 QUALITY,11.00,5,12.20,1.30,.58,10.58,13.82,11.00,14.00
 ,25.00,5,13.20,1.30,.58,11.58,14.82,12.00,15.00
 ,301.00,5,15.00,1.58,.71,13.04,16.96,13.00,17.00
 ,Total,15,13.47,1.77,.46,12.49,14.45,11.00,17.00
 
 Table: ANOVA
 QUALITY,11.00,5,12.20,1.30,.58,10.58,13.82,11.00,14.00
 ,25.00,5,13.20,1.30,.58,11.58,14.82,12.00,15.00
 ,301.00,5,15.00,1.58,.71,13.04,16.96,13.00,17.00
 ,Total,15,13.47,1.77,.46,12.49,14.45,11.00,17.00
 
 Table: ANOVA
-,,Sum of Squares,df,Mean Square,F,Significance
-QUALITY,Between Groups,20.13,2,10.07,5.12,.02
+,,Sum of Squares,df,Mean Square,F,Sig.
+QUALITY,Between Groups,20.13,2,10.07,5.12,.025
 ,Within Groups,23.60,12,1.97,,
 ,Total,43.73,14,,,
 ])
 ,Within Groups,23.60,12,1.97,,
 ,Total,43.73,14,,,
 ])
@@ -331,6 +354,7 @@ AT_CLEANUP
 
 
 AT_SETUP([ONEWAY homogeneity subcommand])
 
 
 AT_SETUP([ONEWAY homogeneity subcommand])
+AT_KEYWORDS([categorical categoricals])
 
 AT_DATA([oneway-homogeneity.sps],
   [DATA LIST NOTABLE LIST /QUALITY * BRAND * .
 
 AT_DATA([oneway-homogeneity.sps],
   [DATA LIST NOTABLE LIST /QUALITY * BRAND * .
@@ -359,14 +383,14 @@ ONEWAY
        .
 ])
 
        .
 ])
 
-AT_CHECK([pspp -O format=csv oneway-homogeneity.sps], [0], 
+AT_CHECK([pspp -O format=csv oneway-homogeneity.sps], [0],
 [Table: Test of Homogeneity of Variances
 [Table: Test of Homogeneity of Variances
-,Levene Statistic,df1,df2,Significance
-QUALITY,.09,2,12,.91
+,Levene Statistic,df1,df2,Sig.
+QUALITY,.09,2,12,.913
 
 Table: ANOVA
 
 Table: ANOVA
-,,Sum of Squares,df,Mean Square,F,Significance
-QUALITY,Between Groups,20.13,2,10.07,5.12,.02
+,,Sum of Squares,df,Mean Square,F,Sig.
+QUALITY,Between Groups,20.13,2,10.07,5.12,.025
 ,Within Groups,23.60,12,1.97,,
 ,Total,43.73,14,,,
 ])
 ,Within Groups,23.60,12,1.97,,
 ,Total,43.73,14,,,
 ])
@@ -376,6 +400,7 @@ AT_CLEANUP
 
 
 AT_SETUP([ONEWAY multiple variables])
 
 
 AT_SETUP([ONEWAY multiple variables])
+AT_KEYWORDS([categorical categoricals])
 dnl check that everything works ok when several different dependent variables are specified.
 dnl This of course does not mean that we're doing a multivariate analysis.  It's just like
 dnl running several tests at once.
 dnl check that everything works ok when several different dependent variables are specified.
 dnl This of course does not mean that we're doing a multivariate analysis.  It's just like
 dnl running several tests at once.
@@ -414,12 +439,14 @@ ONEWAY x y z by g
        /CONTRAST 2 -9 7  0
        .
 ])
        /CONTRAST 2 -9 7  0
        .
 ])
-AT_CHECK([pspp -o pspp.csv multivar.sps])
+
+AT_CHECK([pspp -o pspp.csv -o pspp.txt multivar.sps])
+
 dnl Some machines return 3.88 instead of 3.87 below (see bug #31611).
 dnl Some machines return 3.88 instead of 3.87 below (see bug #31611).
-AT_CHECK([sed 's/^,Within Groups,3.88/,Within Groups,3.87/' pspp.csv], [0],
-[Table: Descriptives
-,,,,,,95% Confidence Interval for Mean,,,
-,,N,Mean,Std. Deviation,Std. Error,Lower Bound,Upper Bound,Minimum,Maximum
+AT_CHECK([sed -e 's/^,Within Groups,3.88/,Within Groups,3.87/' pspp.csv], [0],
+  [Table: Descriptives
+,,N,Mean,Std. Deviation,Std. Error,95% Confidence Interval for Mean,,Minimum,Maximum
+,g,,,,,Lower Bound,Upper Bound,,
 x,10.00,3,3.67,4.62,2.67,-7.81,15.14,1.00,9.00
 ,20.00,5,.80,.45,.20,.24,1.36,.00,1.00
 ,30.00,8,.88,.64,.23,.34,1.41,.00,2.00
 x,10.00,3,3.67,4.62,2.67,-7.81,15.14,1.00,9.00
 ,20.00,5,.80,.45,.20,.24,1.36,.00,1.00
 ,30.00,8,.88,.64,.23,.34,1.41,.00,2.00
@@ -437,43 +464,43 @@ z,10.00,3,3.67,4.73,2.73,-8.07,15.41,.00,9.00
 ,Total,24,4.67,2.99,.61,3.40,5.93,.00,9.00
 
 Table: Test of Homogeneity of Variances
 ,Total,24,4.67,2.99,.61,3.40,5.93,.00,9.00
 
 Table: Test of Homogeneity of Variances
-,Levene Statistic,df1,df2,Significance
-x,18.76,3,20,.00
-y,71.41,3,20,.00
-z,.89,3,20,.46
+,Levene Statistic,df1,df2,Sig.
+x,18.76,3,20,.000
+y,71.41,3,20,.000
+z,.89,3,20,.463
 
 Table: ANOVA
 
 Table: ANOVA
-,,Sum of Squares,df,Mean Square,F,Significance
-x,Between Groups,56.16,3,18.72,2.92,.06
+,,Sum of Squares,df,Mean Square,F,Sig.
+x,Between Groups,56.16,3,18.72,2.92,.059
 ,Within Groups,128.34,20,6.42,,
 ,Total,184.50,23,,,
 ,Within Groups,128.34,20,6.42,,
 ,Total,184.50,23,,,
-y,Between Groups,7.75,3,2.58,13.33,.00
+y,Between Groups,7.75,3,2.58,13.33,.000
 ,Within Groups,3.87,20,.19,,
 ,Total,11.63,23,,,
 ,Within Groups,3.87,20,.19,,
 ,Total,11.63,23,,,
-z,Between Groups,17.47,3,5.82,.62,.61
+z,Between Groups,17.47,3,5.82,.62,.610
 ,Within Groups,187.87,20,9.39,,
 ,Total,205.33,23,,,
 
 Table: Contrast Coefficients
 ,Within Groups,187.87,20,9.39,,
 ,Total,205.33,23,,,
 
 Table: Contrast Coefficients
-,,g,,,
-,,10.00,20.00,30.00,40.00
-Contrast,1,3,2,0,-5
-,2,2,-9,7,0
+,g,,,
+Contrast,10.00,20.00,30.00,40.00
+1,3,2,0,-5
+2,2,-9,7,0
 
 Table: Contrast Tests
 ,,Contrast,Value of Contrast,Std. Error,t,df,Sig. (2-tailed)
 
 Table: Contrast Tests
 ,,Contrast,Value of Contrast,Std. Error,t,df,Sig. (2-tailed)
-x,Assume equal variances,1,-7.40,6.67,1.11,20,.28
-,,2,6.26,12.32,.51,20,.62
-,Does not assume equal,1,-7.40,10.04,-.74,4.53,1.50
-,,2,6.26,5.85,1.07,2.87,.37
-y,Assume equal variances,1,-6.88,1.16,5.94,20,.00
-,,2,3.50,2.14,1.63,20,.12
-,Does not assume equal,1,-6.88,.91,-7.51,7.00,2.00
-,,2,3.50,1.32,2.65,7.00,.03
-z,Assume equal variances,1,-9.70,8.07,1.20,20,.24
-,,2,11.73,14.91,.79,20,.44
-,Does not assume equal,1,-9.70,9.57,-1.01,3.64,1.63
-,,2,11.73,14.53,.81,9.88,.44
+x,Assume equal variances,1,-7.40,6.67,-1.11,20.00,.280
+,,2,6.26,12.32,.51,20.00,.617
+,Does not assume equal variances,1,-7.40,10.04,-.74,4.53,.497
+,,2,6.26,5.85,1.07,2.87,.366
+y,Assume equal variances,1,-6.88,1.16,-5.94,20.00,.000
+,,2,3.50,2.14,1.63,20.00,.118
+,Does not assume equal variances,1,-6.88,.91,-7.51,7.00,.000
+,,2,3.50,1.32,2.65,7.00,.033
+z,Assume equal variances,1,-9.70,8.07,-1.20,20.00,.243
+,,2,11.73,14.91,.79,20.00,.440
+,Does not assume equal variances,1,-9.70,9.57,-1.01,3.64,.373
+,,2,11.73,14.53,.81,9.88,.438
 ])
 
 AT_CLEANUP
 ])
 
 AT_CLEANUP
@@ -482,6 +509,7 @@ AT_CLEANUP
 
 dnl Tests that everything treats weights properly
 AT_SETUP([ONEWAY vs. weights])
 
 dnl Tests that everything treats weights properly
 AT_SETUP([ONEWAY vs. weights])
+AT_KEYWORDS([categorical categoricals])
 
 AT_DATA([oneway-unweighted.sps],
 [DATA LIST NOTABLE LIST /QUALITY * BRAND * W *.
 
 AT_DATA([oneway-unweighted.sps],
 [DATA LIST NOTABLE LIST /QUALITY * BRAND * W *.
@@ -553,6 +581,7 @@ AT_CLEANUP
 
 
 AT_SETUP([ONEWAY posthoc LSD and BONFERRONI])
 
 
 AT_SETUP([ONEWAY posthoc LSD and BONFERRONI])
+AT_KEYWORDS([categorical categoricals])
 AT_DATA([oneway-pig.sps],[dnl
 SET FORMAT F12.3.
 data list notable list /pigmentation * family *.
 AT_DATA([oneway-pig.sps],[dnl
 SET FORMAT F12.3.
 data list notable list /pigmentation * family *.
@@ -586,10 +615,11 @@ oneway pigmentation by family
         .
 ])
 
         .
 ])
 
-AT_CHECK([pspp -O format=csv oneway-pig.sps], [0], 
-[Table: Descriptives
-,,,,,,95% Confidence Interval for Mean,,,
-,,N,Mean,Std. Deviation,Std. Error,Lower Bound,Upper Bound,Minimum,Maximum
+AT_CHECK([pspp -o pspp.csv -o pspp.txt oneway-pig.sps])
+AT_CHECK([cat pspp.csv], [0], [dnl
+Table: Descriptives
+,,N,Mean,Std. Deviation,Std. Error,95% Confidence Interval for Mean,,Minimum,Maximum
+,family,,,,,Lower Bound,Upper Bound,,
 pigmentation,1.000,5,38.600,2.702,1.208,35.245,41.955,36.000,43.000
 ,2.000,5,46.000,1.732,.775,43.849,48.151,43.000,47.000
 ,3.000,5,46.400,4.336,1.939,41.016,51.784,40.000,50.000
 pigmentation,1.000,5,38.600,2.702,1.208,35.245,41.955,36.000,43.000
 ,2.000,5,46.000,1.732,.775,43.849,48.151,43.000,47.000
 ,3.000,5,46.400,4.336,1.939,41.016,51.784,40.000,50.000
@@ -597,14 +627,14 @@ pigmentation,1.000,5,38.600,2.702,1.208,35.245,41.955,36.000,43.000
 ,Total,20,45.850,5.967,1.334,43.057,48.643,36.000,56.000
 
 Table: ANOVA
 ,Total,20,45.850,5.967,1.334,43.057,48.643,36.000,56.000
 
 Table: ANOVA
-,,Sum of Squares,df,Mean Square,F,Significance
+,,Sum of Squares,df,Mean Square,F,Sig.
 pigmentation,Between Groups,478.950,3,159.650,12.927,.000
 ,Within Groups,197.600,16,12.350,,
 ,Total,676.550,19,,,
 
 Table: Multiple Comparisons (pigmentation)
 pigmentation,Between Groups,478.950,3,159.650,12.927,.000
 ,Within Groups,197.600,16,12.350,,
 ,Total,676.550,19,,,
 
 Table: Multiple Comparisons (pigmentation)
-,,,Mean Difference,,,95% Confidence Interval,
-,(I) family,(J) family,(I - J),Std. Error,Sig.,Lower Bound,Upper Bound
+,,,Mean Difference (I - J),Std. Error,Sig.,95% Confidence Interval,
+,(J) Family,(J) Family,,,,Lower Bound,Upper Bound
 LSD,1.000,2.000,-7.400,2.223,.004,-12.112,-2.688
 ,,3.000,-7.800,2.223,.003,-12.512,-3.088
 ,,4.000,-13.800,2.223,.000,-18.512,-9.088
 LSD,1.000,2.000,-7.400,2.223,.004,-12.112,-2.688
 ,,3.000,-7.800,2.223,.003,-12.512,-3.088
 ,,4.000,-13.800,2.223,.000,-18.512,-9.088
@@ -630,11 +660,11 @@ Bonferroni,1.000,2.000,-7.400,2.223,.025,-14.086,-.714
 ,,2.000,6.400,2.223,.065,-.286,13.086
 ,,3.000,6.000,2.223,.095,-.686,12.686
 ])
 ,,2.000,6.400,2.223,.065,-.286,13.086
 ,,3.000,6.000,2.223,.095,-.686,12.686
 ])
-
 AT_CLEANUP
 
 
 AT_SETUP([ONEWAY posthoc Tukey HSD and Games-Howell])
 AT_CLEANUP
 
 
 AT_SETUP([ONEWAY posthoc Tukey HSD and Games-Howell])
+AT_KEYWORDS([categorical categoricals])
 AT_DATA([oneway-tukey.sps],[dnl
 set format = f11.3.
 data list notable list /libido * dose *.
 AT_DATA([oneway-tukey.sps],[dnl
 set format = f11.3.
 data list notable list /libido * dose *.
@@ -664,23 +694,24 @@ oneway libido by dose
        /posthoc tukey gh.
 ])
 
        /posthoc tukey gh.
 ])
 
-AT_CHECK([pspp -O format=csv oneway-tukey.sps], [0], 
-[Table: ANOVA
-,,Sum of Squares,df,Mean Square,F,Significance
+AT_CHECK([pspp -o pspp.csv -o pspp.txt oneway-tukey.sps])
+AT_CHECK([cat pspp.csv], [0], [dnl
+Table: ANOVA
+,,Sum of Squares,df,Mean Square,F,Sig.
 libido,Between Groups,20.133,2,10.067,5.119,.025
 ,Within Groups,23.600,12,1.967,,
 ,Total,43.733,14,,,
 
 Table: Multiple Comparisons (libido)
 libido,Between Groups,20.133,2,10.067,5.119,.025
 ,Within Groups,23.600,12,1.967,,
 ,Total,43.733,14,,,
 
 Table: Multiple Comparisons (libido)
-,,,Mean Difference,,,95% Confidence Interval,
-,(I) Dose of Viagra,(J) Dose of Viagra,(I - J),Std. Error,Sig.,Lower Bound,Upper Bound
+,,,Mean Difference (I - J),Std. Error,Sig.,95% Confidence Interval,
+,(J) Family,(J) Family,,,,Lower Bound,Upper Bound
 Tukey HSD,Placebo,1 Dose,-1.000,.887,.516,-3.366,1.366
 ,,2 Doses,-2.800,.887,.021,-5.166,-.434
 ,1 Dose,Placebo,1.000,.887,.516,-1.366,3.366
 ,,2 Doses,-1.800,.887,.147,-4.166,.566
 ,2 Doses,Placebo,2.800,.887,.021,.434,5.166
 ,,1 Dose,1.800,.887,.147,-.566,4.166
 Tukey HSD,Placebo,1 Dose,-1.000,.887,.516,-3.366,1.366
 ,,2 Doses,-2.800,.887,.021,-5.166,-.434
 ,1 Dose,Placebo,1.000,.887,.516,-1.366,3.366
 ,,2 Doses,-1.800,.887,.147,-4.166,.566
 ,2 Doses,Placebo,2.800,.887,.021,.434,5.166
 ,,1 Dose,1.800,.887,.147,-.566,4.166
-Games-Howell,Placebo,1 Dose,-1.000,.887,.479,-3.356,1.356
+Games-Howell,Placebo,,-1.000,.887,.479,-3.356,1.356
 ,,2 Doses,-2.800,.887,.039,-5.439,-.161
 ,1 Dose,Placebo,1.000,.887,.479,-1.356,3.356
 ,,2 Doses,-1.800,.887,.185,-4.439,.839
 ,,2 Doses,-2.800,.887,.039,-5.439,-.161
 ,1 Dose,Placebo,1.000,.887,.479,-1.356,3.356
 ,,2 Doses,-1.800,.887,.185,-4.439,.839
@@ -691,6 +722,7 @@ Games-Howell,Placebo,1 Dose,-1.000,.887,.479,-3.356,1.356
 AT_CLEANUP
 
 AT_SETUP([ONEWAY posthoc Sidak])
 AT_CLEANUP
 
 AT_SETUP([ONEWAY posthoc Sidak])
+AT_KEYWORDS([categorical categoricals])
 AT_DATA([oneway-sidak.sps],[dnl
 SET FORMAT F20.4.
 
 AT_DATA([oneway-sidak.sps],[dnl
 SET FORMAT F20.4.
 
@@ -724,33 +756,34 @@ ONEWAY
   /POSTHOC = SIDAK.
 ])
 
   /POSTHOC = SIDAK.
 ])
 
-AT_CHECK([pspp -O format=csv oneway-sidak.sps], [0], 
+AT_CHECK([pspp -O format=csv oneway-sidak.sps], [0],
 [Table: ANOVA
 [Table: ANOVA
-,,Sum of Squares,df,Mean Square,F,Significance
-score,Between Groups,54.9500,3,18.3167,7.0449,.0031
+,,Sum of Squares,df,Mean Square,F,Sig.
+score,Between Groups,54.9500,3,18.3167,7.0449,.003
 ,Within Groups,41.6000,16,2.6000,,
 ,Total,96.5500,19,,,
 
 Table: Multiple Comparisons (score)
 ,Within Groups,41.6000,16,2.6000,,
 ,Total,96.5500,19,,,
 
 Table: Multiple Comparisons (score)
-,,,Mean Difference,,,95% Confidence Interval,
-,(I) program,(J) program,(I - J),Std. Error,Sig.,Lower Bound,Upper Bound
-Šidák,1.0000,2.0000,3.0000,1.0198,.0561,-.0575,6.0575
-,,3.0000,-.4000,1.0198,.9993,-3.4575,2.6575
-,,4.0000,3.2000,1.0198,.0375,.1425,6.2575
-,2.0000,1.0000,-3.0000,1.0198,.0561,-6.0575,.0575
-,,3.0000,-3.4000,1.0198,.0250,-6.4575,-.3425
-,,4.0000,.2000,1.0198,1.0000,-2.8575,3.2575
-,3.0000,1.0000,.4000,1.0198,.9993,-2.6575,3.4575
-,,2.0000,3.4000,1.0198,.0250,.3425,6.4575
-,,4.0000,3.6000,1.0198,.0166,.5425,6.6575
-,4.0000,1.0000,-3.2000,1.0198,.0375,-6.2575,-.1425
-,,2.0000,-.2000,1.0198,1.0000,-3.2575,2.8575
-,,3.0000,-3.6000,1.0198,.0166,-6.6575,-.5425
+,,,Mean Difference (I - J),Std. Error,Sig.,95% Confidence Interval,
+,(J) Family,(J) Family,,,,Lower Bound,Upper Bound
+Šidák,1.0000,2.0000,3.0000,1.0198,.056,-.0575,6.0575
+,,3.0000,-.4000,1.0198,.999,-3.4575,2.6575
+,,4.0000,3.2000,1.0198,.038,.1425,6.2575
+,2.0000,1.0000,-3.0000,1.0198,.056,-6.0575,.0575
+,,3.0000,-3.4000,1.0198,.025,-6.4575,-.3425
+,,4.0000,.2000,1.0198,1.000,-2.8575,3.2575
+,3.0000,1.0000,.4000,1.0198,.999,-2.6575,3.4575
+,,2.0000,3.4000,1.0198,.025,.3425,6.4575
+,,4.0000,3.6000,1.0198,.017,.5425,6.6575
+,4.0000,1.0000,-3.2000,1.0198,.038,-6.2575,-.1425
+,,2.0000,-.2000,1.0198,1.000,-3.2575,2.8575
+,,3.0000,-3.6000,1.0198,.017,-6.6575,-.5425
 ])
 
 AT_CLEANUP
 
 AT_SETUP([ONEWAY posthoc Scheffe])
 ])
 
 AT_CLEANUP
 
 AT_SETUP([ONEWAY posthoc Scheffe])
+AT_KEYWORDS([categorical categoricals])
 AT_DATA([oneway-scheffe.sps],[dnl
 set format = f11.3.
 data list notable list /usage * group *.
 AT_DATA([oneway-scheffe.sps],[dnl
 set format = f11.3.
 data list notable list /usage * group *.
@@ -805,16 +838,16 @@ oneway usage by group
        /posthoc scheffe.
 ])
 
        /posthoc scheffe.
 ])
 
-AT_CHECK([pspp -O format=csv oneway-scheffe.sps], [0], 
+AT_CHECK([pspp -O format=csv oneway-scheffe.sps], [0],
 [Table: ANOVA
 [Table: ANOVA
-,,Sum of Squares,df,Mean Square,F,Significance
+,,Sum of Squares,df,Mean Square,F,Sig.
 Days of Use,Between Groups,555.275,3,185.092,6.663,.001
 ,Within Groups,1000.100,36,27.781,,
 ,Total,1555.375,39,,,
 
 Table: Multiple Comparisons (Days of Use)
 Days of Use,Between Groups,555.275,3,185.092,6.663,.001
 ,Within Groups,1000.100,36,27.781,,
 ,Total,1555.375,39,,,
 
 Table: Multiple Comparisons (Days of Use)
-,,,Mean Difference,,,95% Confidence Interval,
-,(I) group,(J) group,(I - J),Std. Error,Sig.,Lower Bound,Upper Bound
+,,,Mean Difference (I - J),Std. Error,Sig.,95% Confidence Interval,
+,(J) Family,(J) Family,,,,Lower Bound,Upper Bound
 Scheffé,one,two,3.800,2.357,.467,-3.112,10.712
 ,,three,10.300,2.357,.001,3.388,17.212
 ,,four,6.000,2.357,.110,-.912,12.912
 Scheffé,one,two,3.800,2.357,.467,-3.112,10.712
 ,,three,10.300,2.357,.001,3.388,17.212
 ,,four,6.000,2.357,.110,-.912,12.912
@@ -833,6 +866,7 @@ AT_CLEANUP
 
 
 AT_SETUP([ONEWAY bad contrast count])
 
 
 AT_SETUP([ONEWAY bad contrast count])
+AT_KEYWORDS([categorical categoricals])
 
 AT_DATA([oneway-bad-contrast.sps],[dnl
 DATA LIST NOTABLE LIST /height * weight * temperature * sex *.
 
 AT_DATA([oneway-bad-contrast.sps],[dnl
 DATA LIST NOTABLE LIST /height * weight * temperature * sex *.
@@ -848,62 +882,65 @@ BEGIN DATA.
 END DATA.
 
 ONEWAY /VARIABLES= height weight temperature BY sex
 END DATA.
 
 ONEWAY /VARIABLES= height weight temperature BY sex
- /CONTRAST = -1  1 
- /CONTRAST = -3  3 
+ /CONTRAST = -1  1
+ /CONTRAST = -3  3
  /CONTRAST =  2 -2  1
  /CONTRAST = -9  9
  /CONTRAST =  2 -2  1
  /CONTRAST = -9  9
- . 
+ .
 ])
 
 
 ])
 
 
-AT_CHECK([pspp -O format=csv oneway-bad-contrast.sps], [0], [dnl
+AT_CHECK([pspp -o pspp.csv -o pspp.txt oneway-bad-contrast.sps], [0], [dnl
+oneway-bad-contrast.sps:18: warning: ONEWAY: In contrast list 3, the number of coefficients (3) does not equal the number of groups (2). This contrast list will be ignored.
+])
+AT_CHECK([cat pspp.csv], [0], [dnl
 "oneway-bad-contrast.sps:18: warning: ONEWAY: In contrast list 3, the number of coefficients (3) does not equal the number of groups (2). This contrast list will be ignored."
 
 Table: ANOVA
 "oneway-bad-contrast.sps:18: warning: ONEWAY: In contrast list 3, the number of coefficients (3) does not equal the number of groups (2). This contrast list will be ignored."
 
 Table: ANOVA
-,,Sum of Squares,df,Mean Square,F,Significance
-height,Between Groups,92629.63,1,92629.63,120.77,.00
+,,Sum of Squares,df,Mean Square,F,Sig.
+height,Between Groups,92629.63,1,92629.63,120.77,.000
 ,Within Groups,4601.87,6,766.98,,
 ,Total,97231.50,7,,,
 ,Within Groups,4601.87,6,766.98,,
 ,Total,97231.50,7,,,
-weight,Between Groups,2451.65,1,2451.65,174.59,.00
+weight,Between Groups,2451.65,1,2451.65,174.59,.000
 ,Within Groups,84.25,6,14.04,,
 ,Total,2535.90,7,,,
 ,Within Groups,84.25,6,14.04,,
 ,Total,2535.90,7,,,
-temperature,Between Groups,1.80,1,1.80,.13,.73
+temperature,Between Groups,1.80,1,1.80,.13,.733
 ,Within Groups,84.55,6,14.09,,
 ,Total,86.36,7,,,
 
 Table: Contrast Coefficients
 ,Within Groups,84.55,6,14.09,,
 ,Total,86.36,7,,,
 
 Table: Contrast Coefficients
-,,sex,
-,,.00,1.00
-Contrast,1,-1,1
-,2,-3,3
-,3,-9,9
+,sex,
+Contrast,.00,1.00
+1,-1,1
+2,-3,3
+3,-9,9
 
 Table: Contrast Tests
 ,,Contrast,Value of Contrast,Std. Error,t,df,Sig. (2-tailed)
 
 Table: Contrast Tests
 ,,Contrast,Value of Contrast,Std. Error,t,df,Sig. (2-tailed)
-height,Assume equal variances,1,-222.27,20.23,10.99,6,.00
-,,2,-666.80,60.68,10.99,6,.00
-,,3,-2000.40,182.03,10.99,6,.00
-,Does not assume equal,1,-222.27,27.67,-8.03,2.00,1.98
-,,2,-666.80,83.02,-8.03,2.00,1.98
-,,3,-2000.40,249.07,-8.03,2.00,1.98
-weight,Assume equal variances,1,-36.16,2.74,13.21,6,.00
-,,2,-108.48,8.21,13.21,6,.00
-,,3,-325.44,24.63,13.21,6,.00
-,Does not assume equal,1,-36.16,2.19,-16.48,5.42,2.00
-,,2,-108.48,6.58,-16.48,5.42,2.00
-,,3,-325.44,19.75,-16.48,5.42,2.00
-temperature,Assume equal variances,1,-.98,2.74,.36,6,.73
-,,2,-2.94,8.22,.36,6,.73
-,,3,-8.83,24.67,.36,6,.73
-,Does not assume equal,1,-.98,2.07,-.47,4.19,1.34
-,,2,-2.94,6.22,-.47,4.19,1.34
-,,3,-8.83,18.66,-.47,4.19,1.34
+height,Assume equal variances,1,-222.27,20.23,-10.99,6.00,.000
+,,2,-666.80,60.68,-10.99,6.00,.000
+,,3,-2000.40,182.03,-10.99,6.00,.000
+,Does not assume equal variances,1,-222.27,27.67,-8.03,2.00,.015
+,,2,-666.80,83.02,-8.03,2.00,.015
+,,3,-2000.40,249.07,-8.03,2.00,.015
+weight,Assume equal variances,1,-36.16,2.74,-13.21,6.00,.000
+,,2,-108.48,8.21,-13.21,6.00,.000
+,,3,-325.44,24.63,-13.21,6.00,.000
+,Does not assume equal variances,1,-36.16,2.19,-16.48,5.42,.000
+,,2,-108.48,6.58,-16.48,5.42,.000
+,,3,-325.44,19.75,-16.48,5.42,.000
+temperature,Assume equal variances,1,-.98,2.74,-.36,6.00,.733
+,,2,-2.94,8.22,-.36,6.00,.733
+,,3,-8.83,24.67,-.36,6.00,.733
+,Does not assume equal variances,1,-.98,2.07,-.47,4.19,.660
+,,2,-2.94,6.22,-.47,4.19,.660
+,,3,-8.83,18.66,-.47,4.19,.660
 ])
 ])
-
 AT_CLEANUP
 
 
 AT_SETUP([ONEWAY crash on single category independent variable])
 AT_CLEANUP
 
 
 AT_SETUP([ONEWAY crash on single category independent variable])
+AT_KEYWORDS([categorical categoricals])
 AT_DATA([crash.sps],[
 input program.
 loop #i = 1 to 10.
 AT_DATA([crash.sps],[
 input program.
 loop #i = 1 to 10.
@@ -925,23 +962,24 @@ AT_CLEANUP
 
 
 AT_SETUP([ONEWAY crash on missing dependent variable])
 
 
 AT_SETUP([ONEWAY crash on missing dependent variable])
+AT_KEYWORDS([categorical categoricals])
 AT_DATA([crash2.sps],[dnl
 data list notable list /dv1 * dv2  *  y * .
 begin data.
 AT_DATA([crash2.sps],[dnl
 data list notable list /dv1 * dv2  *  y * .
 begin data.
-2  .  2     
-1  .  2 
-1  .  1    
-2  .  4    
+2  .  2
+1  .  2
+1  .  1
+2  .  4
 3  .  4
 3  .  4
-4  .  4    
-5  .  4    
+4  .  4
+5  .  4
 end data.
 
 end data.
 
-ONEWAY 
+ONEWAY
        /VARIABLES= dv1 dv2  BY y
        /STATISTICS = DESCRIPTIVES
        /POSTHOC = BONFERRONI LSD SCHEFFE SIDAK TUKEY
        /VARIABLES= dv1 dv2  BY y
        /STATISTICS = DESCRIPTIVES
        /POSTHOC = BONFERRONI LSD SCHEFFE SIDAK TUKEY
-       /MISSING = ANALYSIS      
+       /MISSING = ANALYSIS
        .
 ])
 
        .
 ])
 
@@ -953,6 +991,7 @@ AT_CLEANUP
 
 
 AT_SETUP([ONEWAY Games-Howell test with few cases])
 
 
 AT_SETUP([ONEWAY Games-Howell test with few cases])
+AT_KEYWORDS([categorical categoricals])
 AT_DATA([crash3.sps],[dnl
 data list notable list /dv * y * .
 begin data.
 AT_DATA([crash3.sps],[dnl
 data list notable list /dv * y * .
 begin data.
@@ -966,9 +1005,141 @@ end data.
 ONEWAY
  /VARIABLES= dv BY y
  /POSTHOC = GH
 ONEWAY
  /VARIABLES= dv BY y
  /POSTHOC = GH
- . 
+ .
 ])
 
 AT_CHECK([pspp -O format=csv crash3.sps], [0], [ignore])
 
 AT_CLEANUP
 ])
 
 AT_CHECK([pspp -O format=csv crash3.sps], [0], [ignore])
 
 AT_CLEANUP
+
+
+AT_SETUP([ONEWAY Crash on empty data])
+AT_KEYWORDS([categorical categoricals])
+AT_DATA([crash4.sps],[dnl
+DATA LIST NOTABLE LIST /height * weight * temperature * sex *.
+BEGIN DATA.
+1801     .       .     0
+1606     .       .     1
+END DATA.
+
+ONEWAY /VARIABLES= height weight temperature BY sex
+ /CONTRAST = -1  1
+ /CONTRAST = -3  3
+ /CONTRAST =  2 -2  1
+ /CONTRAST = -9  9
+ .
+])
+
+AT_CHECK([pspp -O format=csv crash4.sps], [0], [ignore])
+
+AT_CLEANUP
+
+
+
+AT_SETUP([ONEWAY Crash on invalid dependent variable])
+AT_KEYWORDS([categorical categoricals])
+AT_DATA([crash5.sps],[dnl
+data list notable list /a * b *.
+begin data.
+3 0
+2 0
+6 2
+end data.
+
+oneway a"by b.
+
+])
+
+AT_CHECK([pspp -O format=csv crash5.sps], [1], [ignore])
+
+AT_CLEANUP
+
+
+
+
+AT_SETUP([ONEWAY Crash on unterminated string])
+AT_KEYWORDS([categorical categoricals])
+
+AT_DATA([crash6.sps], [dnl
+DATA LIST NOTABLE LIST /height * weight * temperature * sex *.
+BEGIN DATA.
+1801     .       .     0
+1606     .   0   .     1
+END DATA.
+
+ONEWAY /VARIABLES= height weight temperature BY sex
+ /CONTRAST =" 2 -2  1
+ .
+])
+
+AT_CHECK([pspp -O format=csv crash6.sps], [1], [ignore])
+
+AT_CLEANUP
+
+
+AT_SETUP([ONEWAY contrast bug])
+
+AT_KEYWORDS([categorical categoricals])
+
+
+
+dnl this example comes from: https://case.truman.edu/files/2015/06/SPSS-One-Way-ANOVA.pdf
+AT_DATA([contrasts.sps],
+[
+SET FORMAT=F10.3.
+
+DATA LIST notable LIST /relieftime drugs *.
+begin data.
+12 0
+15 0
+18 0
+16 0
+20 0
+20 1
+21 1
+22 1
+19 1
+20 1
+17 2
+16 2
+19 2
+15 2
+19 2
+14 3
+13 3
+12 3
+14 3
+11 3
+end data.
+
+ONEWAY relieftime by drugs
+       /CONTRAST 3 -1 -1 -1
+       /CONTRAST 0 2 -1 -1
+        /CONTRAST 0 0 1 -1
+       .
+])
+
+AT_CHECK([pspp -O format=csv contrasts.sps], [0], [Table: ANOVA
+,,Sum of Squares,df,Mean Square,F,Sig.
+relieftime,Between Groups,146.950,3,48.983,12.723,.000
+,Within Groups,61.600,16,3.850,,
+,Total,208.550,19,,,
+
+Table: Contrast Coefficients
+,drugs,,,
+Contrast,.000,1.000,2.000,3.000
+1,3,-1,-1,-1
+2,0,2,-1,-1
+3,0,0,1,-1
+
+Table: Contrast Tests
+,,Contrast,Value of Contrast,Std. Error,t,df,Sig. (2-tailed)
+relieftime,Assume equal variances,1,-1.800,3.040,-.592,16.000,.562
+,,2,10.800,2.149,5.025,16.000,.000
+,,3,4.400,1.241,3.546,16.000,.003
+,Does not assume equal variances,1,-1.800,4.219,-.427,4.611,.689
+,,2,10.800,1.421,7.599,10.158,.000
+,,3,4.400,.990,4.445,7.315,.003
+])
+
+AT_CLEANUP