From 15e323443edce619168aede1421aa195e7f7ecc2 Mon Sep 17 00:00:00 2001 From: Ben Pfaff Date: Sun, 7 Aug 2022 22:59:15 -0700 Subject: [PATCH] Test individual-cell summary functions for scale varaibles. --- doc/statistics.texi | 4 +- src/language/stats/ctables.c | 8 +- tests/language/stats/ctables.at | 187 +++++++++++++++++++++++++++++++- 3 files changed, 193 insertions(+), 6 deletions(-) diff --git a/doc/statistics.texi b/doc/statistics.texi index 75de355bd0..7ac4191bb8 100644 --- a/doc/statistics.texi +++ b/doc/statistics.texi @@ -1197,8 +1197,8 @@ The following sections list the available summary functions. @node CTABLES Summary Functions for Individual Cells @subsubsection Summary Functions for Individual Cells -This section lists the summary functions that can be applied to -individual cells in @code{CTABLES}. Only one such summary function, +This section lists the summary functions that consider only an +individual cell in @code{CTABLES}. Only one such summary function, @code{COUNT}, may be applied to both categorical and scale variables: @table @asis diff --git a/src/language/stats/ctables.c b/src/language/stats/ctables.c index 7b7a81946c..da511b6951 100644 --- a/src/language/stats/ctables.c +++ b/src/language/stats/ctables.c @@ -2680,12 +2680,16 @@ ctables_summary_add (union ctables_summary *s, break; case CTSF_MISSING: - if (is_missing) + if (is_scale + ? is_scale_missing + : is_missing) s->count += d_weight; break; case CTSF_UMISSING: - if (is_missing) + if (is_scale + ? is_scale_missing + : is_missing) s->count += 1.0; break; diff --git a/tests/language/stats/ctables.at b/tests/language/stats/ctables.at index 0b6e769af1..15b023e21f 100644 --- a/tests/language/stats/ctables.at +++ b/tests/language/stats/ctables.at @@ -2774,12 +2774,195 @@ AT_CHECK([ln $top_srcdir/examples/nhtsa.sav . || cp $top_srcdir/examples/nhtsa.s AT_DATA([ctables.sps], [[GET 'nhtsa.sav'. SET TVAR=NAME. + +* Use SPLIT FILE with FREQUENCIES to generate output equivalent to + CTABLES later, to make the results easier to verify. SPLIT FILE BY REGION. -FREQUENCIES qn19a /STATISTICS=ALL /FORMAT NOTABLE. +FREQUENCIES + qn19a + /STATISTICS=MEAN SEMEAN MEDIAN MODE STDDEV VARIANCE RANGE MINIMUM MAXIMUM SUM + /FORMAT NOTABLE /MISSING=INCLUDE. SPLIT FILE OFF. + CTABLES /VLABELS VARIABLE=qn19a DISPLAY=NAME /*XXX NONE yields an assertion failure - /TABLE region BY qn19a[COUNT, MAXIMUM, MEAN, MINIMUM, MISSING, MODE] + /TABLE region BY qn19a[VALIDN, MISSING, MEAN, SEMEAN, MEDIAN, MODE, STDDEV, VARIANCE, RANGE, MINIMUM, MAXIMUM, SUM, COUNT, TOTALN] + /CATEGORIES VARIABLES=qn19a TOTAL=YES MISSING=INCLUDE + /SLABELS POSITION=ROW. +]]) +AT_CHECK([pspp ctables.sps -O box=unicode -O width=120], [0], [dnl + Statistics +╭────────────────┬────────╮ +│REGION │ QN19A │ +├────────────────┼────────┤ +│NE N Valid │ 936│ +│ Missing│ 473│ +│ ╶─────────┼────────┤ +│ Mean │ 19.33│ +│ ╶─────────┼────────┤ +│ S.E. Mean│ .14│ +│ ╶─────────┼────────┤ +│ Median │ 18.00│ +│ ╶─────────┼────────┤ +│ Mode │ 18.00│ +│ ╶─────────┼────────┤ +│ Std Dev │ 4.41│ +│ ╶─────────┼────────┤ +│ Variance │ 19.41│ +│ ╶─────────┼────────┤ +│ Range │ 59.00│ +│ ╶─────────┼────────┤ +│ Minimum │ .00│ +│ ╶─────────┼────────┤ +│ Maximum │ 59.00│ +│ ╶─────────┼────────┤ +│ Sum │18092.00│ +├────────────────┼────────┤ +│MW N Valid │ 1019│ +│ Missing│ 635│ +│ ╶─────────┼────────┤ +│ Mean │ 19.83│ +│ ╶─────────┼────────┤ +│ S.E. Mean│ .16│ +│ ╶─────────┼────────┤ +│ Median │ 19.00│ +│ ╶─────────┼────────┤ +│ Mode │ 18.00│ +│ ╶─────────┼────────┤ +│ Std Dev │ 5.15│ +│ ╶─────────┼────────┤ +│ Variance │ 26.47│ +│ ╶─────────┼────────┤ +│ Range │ 71.00│ +│ ╶─────────┼────────┤ +│ Minimum │ 4.00│ +│ ╶─────────┼────────┤ +│ Maximum │ 75.00│ +│ ╶─────────┼────────┤ +│ Sum │20206.00│ +├────────────────┼────────┤ +│S N Valid │ 1276│ +│ Missing│ 1114│ +│ ╶─────────┼────────┤ +│ Mean │ 20.29│ +│ ╶─────────┼────────┤ +│ S.E. Mean│ .18│ +│ ╶─────────┼────────┤ +│ Median │ 19.00│ +│ ╶─────────┼────────┤ +│ Mode │ 18.00│ +│ ╶─────────┼────────┤ +│ Std Dev │ 6.44│ +│ ╶─────────┼────────┤ +│ Variance │ 41.43│ +│ ╶─────────┼────────┤ +│ Range │ 75.00│ +│ ╶─────────┼────────┤ +│ Minimum │ 4.00│ +│ ╶─────────┼────────┤ +│ Maximum │ 79.00│ +│ ╶─────────┼────────┤ +│ Sum │25886.00│ +├────────────────┼────────┤ +│W N Valid │ 950│ +│ Missing│ 596│ +│ ╶─────────┼────────┤ +│ Mean │ 19.87│ +│ ╶─────────┼────────┤ +│ S.E. Mean│ .17│ +│ ╶─────────┼────────┤ +│ Median │ 19.00│ +│ ╶─────────┼────────┤ +│ Mode │ 18.00│ +│ ╶─────────┼────────┤ +│ Std Dev │ 5.25│ +│ ╶─────────┼────────┤ +│ Variance │ 27.59│ +│ ╶─────────┼────────┤ +│ Range │ 61.00│ +│ ╶─────────┼────────┤ +│ Minimum │ 4.00│ +│ ╶─────────┼────────┤ +│ Maximum │ 65.00│ +│ ╶─────────┼────────┤ +│ Sum │18877.00│ +╰────────────────┴────────╯ + + Custom Tables +╭───────────────────────────┬────────╮ +│ │ QN19A │ +├───────────────────────────┼────────┤ +│REGION NE Valid N │ 936│ +│ Missing │ 473.00│ +│ Mean │ 19.33│ +│ Std Error of Mean│ .14│ +│ Median │ 18.00│ +│ Mode │ 18.00│ +│ Std Deviation │ 4.41│ +│ Variance │ 19.41│ +│ Range │ 59.00│ +│ Minimum │ .00│ +│ Maximum │ 59.00│ +│ Sum │18092.00│ +│ Count │ 1409│ +│ Total N │ 1409│ +│ ╶────────────────────┼────────┤ +│ MW Valid N │ 1019│ +│ Missing │ 635.00│ +│ Mean │ 19.83│ +│ Std Error of Mean│ .16│ +│ Median │ 19.00│ +│ Mode │ 18.00│ +│ Std Deviation │ 5.15│ +│ Variance │ 26.47│ +│ Range │ 71.00│ +│ Minimum │ 4.00│ +│ Maximum │ 75.00│ +│ Sum │20206.00│ +│ Count │ 1654│ +│ Total N │ 1654│ +│ ╶────────────────────┼────────┤ +│ S Valid N │ 1276│ +│ Missing │ 1114.00│ +│ Mean │ 20.29│ +│ Std Error of Mean│ .18│ +│ Median │ 19.00│ +│ Mode │ 18.00│ +│ Std Deviation │ 6.44│ +│ Variance │ 41.43│ +│ Range │ 75.00│ +│ Minimum │ 4.00│ +│ Maximum │ 79.00│ +│ Sum │25886.00│ +│ Count │ 2390│ +│ Total N │ 2390│ +│ ╶────────────────────┼────────┤ +│ W Valid N │ 950│ +│ Missing │ 596.00│ +│ Mean │ 19.87│ +│ Std Error of Mean│ .17│ +│ Median │ 19.00│ +│ Mode │ 18.00│ +│ Std Deviation │ 5.25│ +│ Variance │ 27.59│ +│ Range │ 61.00│ +│ Minimum │ 4.00│ +│ Maximum │ 65.00│ +│ Sum │18877.00│ +│ Count │ 1546│ +│ Total N │ 1546│ +╰───────────────────────────┴────────╯ +]) +AT_CLEANUP + + +AT_SETUP([CTABLES scale summary functions - assertion failure]) +AT_CHECK([ln $top_srcdir/examples/nhtsa.sav . || cp $top_srcdir/examples/nhtsa.sav .]) +AT_DATA([ctables.sps], +[[GET 'nhtsa.sav'. +CTABLES + /VLABELS VARIABLE=qn19a DISPLAY=NONE + /TABLE region BY qn19a /CATEGORIES VARIABLES=qn19a TOTAL=YES MISSING=INCLUDE /SLABELS POSITION=ROW. ]]) -- 2.30.2