AT_BANNER([CTABLES])
+dnl TODO:
+dnl
+dnl - Parsing (positive and negative)
+dnl - String variables and values
+dnl - Date/time variables and values
+dnl - Multiple-response sets.
+dnl * MRSETS subcommand.
+dnl - SPLIT FILE with SEPARATE splits
+dnl - Definition of columns/rows when labels are rotated from one axis to another.
+dnl - Preprocessing to distinguish categorical from scale.
+dnl - )CILEVEL in summary specifications
+dnl - Summary functions:
+dnl * Unimplemented ones.
+dnl * U-prefix for unweighted summaries.
+dnl * .LCL and .UCL suffixes.
+dnl * .SE suffixes.
+dnl * Separate summary functions for totals and subtotals.
+dnl - Special formats for summary functions: NEGPAREN, NEQUAL, PAREN, PCTPAREN.
+dnl - Testing details of missing value handling in summaries.
+dnl - test CLABELS ROWLABELS=LAYER.
+dnl - CATEGORIES:
+dnl * Special case for explicit category specifications and multiple dichotomy sets
+dnl * THRU
+dnl * OTHERNM
+dnl * String values
+dnl * Date values
+dnl * Data-dependent sorting.
+dnl - TITLES: )DATE, )TIME, )TABLE.
+dnl - SIGTEST
+dnl - COMPARETEST
+dnl - FORMAT:
+dnl * MINCOLWIDTH, MAXCOLWIDTH, UNITS.
+dnl * EMPTY.
+dnl * MISSING.
+dnl - VLABELS.
+dnl - SMISSING.
+dnl - Test WEIGHT and adjustment weights.
+dnl - Test PCOMPUTE and PPROPERTIES.
+dnl - PCOMPUTE:
+dnl * multi-dimensional
+dnl * MISSING, OTHERNM
+dnl * strings
+dnl - HIDESMALLCOUNTS.
+dnl - Are string ranges a thing?
+dnl
+dnl Bug:
+dnl CTABLES /TABLE=qnd1 [MEAN, MEDIAN] BY qns3a.
+dnl produces a bad median:
+dnl Custom Tables
+dnl +--------------------------+-----------------------+
+dnl | | S3a. GENDER: |
+dnl | +-----------+-----------+
+dnl | | Male | Female |
+dnl | +----+------+----+------+
+dnl | |Mean|Median|Mean|Median|
+dnl +--------------------------+----+------+----+------+
+dnl |D1. AGE: What is your age?| 46| 999| 50| 999|
+dnl +--------------------------+----+------+----+------+
+
+
+
# AT_SETUP([CTABLES parsing])
# AT_DATA([ctables.sps],
# [[DATA LIST LIST NOTABLE /x y z.
])
AT_CLEANUP
+AT_SETUP([CTABLES show or hide empty categories])
+AT_CHECK([ln $top_srcdir/examples/nhtsa.sav . || cp $top_srcdir/examples/nhtsa.sav .])
+AT_DATA([ctables.sps],
+[[GET 'nhtsa.sav'.
+IF (qn105ba = 2) qn105ba = 1.
+IF (qns3a = 1) qns3a = 2.
+CTABLES /TABLE qn105ba BY qns3a [COLPCT PCT8.0].
+CTABLES /TABLE qn105ba BY qns3a [COLPCT PCT8.0]
+ /CATEGORIES VAR=qn105ba EMPTY=EXCLUDE.
+CTABLES /TABLE qn105ba BY qns3a [COLPCT PCT8.0]
+ /CATEGORIES VAR=qns3a EMPTY=EXCLUDE.
+CTABLES /TABLE qn105ba BY qns3a [COLPCT PCT8.0]
+ /CATEGORIES VAR=ALL EMPTY=EXCLUDE.
+]])
+AT_CHECK([pspp ctables.sps -O box=unicode -O width=80], [0], [dnl
+ Custom Tables
+╭──────────────────────────────────────────────────────────────┬───────────────╮
+│ │ S3a. GENDER: │
+│ ├───────┬───────┤
+│ │ Male │ Female│
+│ ├───────┼───────┤
+│ │ Column│ Column│
+│ │ % │ % │
+├──────────────────────────────────────────────────────────────┼───────┼───────┤
+│105b. How likely is it that drivers who have had Almost │ .│ 32%│
+│too much to drink to drive safely will A. Get certain │ │ │
+│stopped by the police? Very likely│ .│ 0%│
+│ Somewhat │ .│ 40%│
+│ likely │ │ │
+│ Somewhat │ .│ 19%│
+│ unlikely │ │ │
+│ Very │ .│ 9%│
+│ unlikely │ │ │
+╰──────────────────────────────────────────────────────────────┴───────┴───────╯
+
+ Custom Tables
+╭──────────────────────────────────────────────────────────────┬───────────────╮
+│ │ S3a. GENDER: │
+│ ├───────┬───────┤
+│ │ Male │ Female│
+│ ├───────┼───────┤
+│ │ Column│ Column│
+│ │ % │ % │
+├──────────────────────────────────────────────────────────────┼───────┼───────┤
+│105b. How likely is it that drivers who have had Almost │ .│ 32%│
+│too much to drink to drive safely will A. Get certain │ │ │
+│stopped by the police? Somewhat │ .│ 40%│
+│ likely │ │ │
+│ Somewhat │ .│ 19%│
+│ unlikely │ │ │
+│ Very │ .│ 9%│
+│ unlikely │ │ │
+╰──────────────────────────────────────────────────────────────┴───────┴───────╯
+
+ Custom Tables
+╭────────────────────────────────────────────────────────────────────┬─────────╮
+│ │ S3a. │
+│ │ GENDER: │
+│ ├─────────┤
+│ │ Female │
+│ ├─────────┤
+│ │ Column %│
+├────────────────────────────────────────────────────────────────────┼─────────┤
+│105b. How likely is it that drivers who have had too Almost │ 32%│
+│much to drink to drive safely will A. Get stopped by certain │ │
+│the police? Very likely │ 0%│
+│ Somewhat │ 40%│
+│ likely │ │
+│ Somewhat │ 19%│
+│ unlikely │ │
+│ Very │ 9%│
+│ unlikely │ │
+╰────────────────────────────────────────────────────────────────────┴─────────╯
+
+ Custom Tables
+╭────────────────────────────────────────────────────────────────────┬─────────╮
+│ │ S3a. │
+│ │ GENDER: │
+│ ├─────────┤
+│ │ Female │
+│ ├─────────┤
+│ │ Column %│
+├────────────────────────────────────────────────────────────────────┼─────────┤
+│105b. How likely is it that drivers who have had too Almost │ 32%│
+│much to drink to drive safely will A. Get stopped by certain │ │
+│the police? Somewhat │ 40%│
+│ likely │ │
+│ Somewhat │ 19%│
+│ unlikely │ │
+│ Very │ 9%│
+│ unlikely │ │
+╰────────────────────────────────────────────────────────────────────┴─────────╯
+])
+AT_CLEANUP
AT_SETUP([CTABLES simple nesting])
AT_CHECK([ln $top_srcdir/examples/nhtsa.sav . || cp $top_srcdir/examples/nhtsa.sav .])
AT_DATA([ctables.sps],
[[GET 'nhtsa.sav'.
-CTABLES /TABLE (qn105ba + qn105bb + qn105bc + qn105bd) > qns3a [TABLEPCT PCT8.0]
- /CATEGORIES VARIABLES=qns3a TOTAL=NO.
+CTABLES /TABLE (qn105ba + qn105bb + qn105bc + qn105bd) > qns3a [COUNT, TABLEPCT PCT8.0]
+ /CATEGORIES VARIABLES=qns3a TOTAL=YES.
CTABLES /TABLE qns3a > (qn105ba + qn105bb + qn105bc + qn105bd) [TABLEPCT PCT8.0]
- /CATEGORIES VARIABLES=qns3a TOTAL=NO
+ /CATEGORIES VARIABLES=qns3a TOTAL=YES
/CLABELS ROW=OPPOSITE.
]])
-dnl XXX With TOTAL=YES above, the totals get included in the denominator so that
-dnl the percentages are about half of the correct values.
AT_CHECK([pspp ctables.sps -O box=unicode -O width=80], [0], [dnl
Custom Tables
-╭───────────────────────────────────────────────────────────────────────┬──────╮
-│ │ Table│
-│ │ % │
-├───────────────────────────────────────────────────────────────────────┼──────┤
-│105b. How likely is it that drivers who Almost S3a. Male │ 4%│
-│have had too much to drink to drive safely certain GENDER: Female│ 6%│
-│will A. Get stopped by the police? ╶───────────────────────────┼──────┤
-│ Very likely S3a. Male │ 10%│
-│ GENDER: Female│ 12%│
-│ ╶───────────────────────────┼──────┤
-│ Somewhat S3a. Male │ 17%│
-│ likely GENDER: Female│ 23%│
-│ ╶───────────────────────────┼──────┤
-│ Somewhat S3a. Male │ 9%│
-│ unlikely GENDER: Female│ 10%│
-│ ╶───────────────────────────┼──────┤
-│ Very S3a. Male │ 5%│
-│ unlikely GENDER: Female│ 4%│
-├───────────────────────────────────────────────────────────────────────┼──────┤
-│105b. How likely is it that drivers who Almost S3a. Male │ 6%│
-│have had too much to drink to drive safely certain GENDER: Female│ 10%│
-│will B. Have an accident? ╶───────────────────────────┼──────┤
-│ Very likely S3a. Male │ 16%│
-│ GENDER: Female│ 25%│
-│ ╶───────────────────────────┼──────┤
-│ Somewhat S3a. Male │ 17%│
-│ likely GENDER: Female│ 18%│
-│ ╶───────────────────────────┼──────┤
-│ Somewhat S3a. Male │ 4%│
-│ unlikely GENDER: Female│ 2%│
-│ ╶───────────────────────────┼──────┤
-│ Very S3a. Male │ 1%│
-│ unlikely GENDER: Female│ 1%│
-├───────────────────────────────────────────────────────────────────────┼──────┤
-│105b. How likely is it that drivers who Almost S3a. Male │ 8%│
-│have had too much to drink to drive safely certain GENDER: Female│ 9%│
-│will C. Be convicted for drunk driving? ╶───────────────────────────┼──────┤
-│ Very likely S3a. Male │ 14%│
-│ GENDER: Female│ 15%│
-│ ╶───────────────────────────┼──────┤
-│ Somewhat S3a. Male │ 12%│
-│ likely GENDER: Female│ 18%│
-│ ╶───────────────────────────┼──────┤
-│ Somewhat S3a. Male │ 7%│
-│ unlikely GENDER: Female│ 8%│
-│ ╶───────────────────────────┼──────┤
-│ Very S3a. Male │ 4%│
-│ unlikely GENDER: Female│ 5%│
-├───────────────────────────────────────────────────────────────────────┼──────┤
-│105b. How likely is it that drivers who Almost S3a. Male │ 7%│
-│have had too much to drink to drive safely certain GENDER: Female│ 9%│
-│will D. Be arrested for drunk driving? ╶───────────────────────────┼──────┤
-│ Very likely S3a. Male │ 12%│
-│ GENDER: Female│ 15%│
-│ ╶───────────────────────────┼──────┤
-│ Somewhat S3a. Male │ 14%│
-│ likely GENDER: Female│ 19%│
-│ ╶───────────────────────────┼──────┤
-│ Somewhat S3a. Male │ 8%│
-│ unlikely GENDER: Female│ 8%│
-│ ╶───────────────────────────┼──────┤
-│ Very S3a. Male │ 4%│
-│ unlikely GENDER: Female│ 4%│
-╰───────────────────────────────────────────────────────────────────────┴──────╯
+╭─────────────────────────────────────────────────────────────────┬─────┬──────╮
+│ │ │ Table│
+│ │Count│ % │
+├─────────────────────────────────────────────────────────────────┼─────┼──────┤
+│105b. How likely is it that drivers Almost S3a. Male │ 297│ 4%│
+│who have had too much to drink to certain GENDER: Female│ 403│ 6%│
+│drive safely will A. Get stopped by Total │ 700│ 10%│
+│the police? ╶──────────────────────────┼─────┼──────┤
+│ Very S3a. Male │ 660│ 10%│
+│ likely GENDER: Female│ 842│ 12%│
+│ Total │ 1502│ 22%│
+│ ╶──────────────────────────┼─────┼──────┤
+│ Somewhat S3a. Male │ 1174│ 17%│
+│ likely GENDER: Female│ 1589│ 23%│
+│ Total │ 2763│ 40%│
+│ ╶──────────────────────────┼─────┼──────┤
+│ Somewhat S3a. Male │ 640│ 9%│
+│ unlikely GENDER: Female│ 667│ 10%│
+│ Total │ 1307│ 19%│
+│ ╶──────────────────────────┼─────┼──────┤
+│ Very S3a. Male │ 311│ 5%│
+│ unlikely GENDER: Female│ 298│ 4%│
+│ Total │ 609│ 9%│
+├─────────────────────────────────────────────────────────────────┼─────┼──────┤
+│105b. How likely is it that drivers Almost S3a. Male │ 429│ 6%│
+│who have had too much to drink to certain GENDER: Female│ 671│ 10%│
+│drive safely will B. Have an accident? Total │ 1100│ 16%│
+│ ╶──────────────────────────┼─────┼──────┤
+│ Very S3a. Male │ 1104│ 16%│
+│ likely GENDER: Female│ 1715│ 25%│
+│ Total │ 2819│ 41%│
+│ ╶──────────────────────────┼─────┼──────┤
+│ Somewhat S3a. Male │ 1203│ 17%│
+│ likely GENDER: Female│ 1214│ 18%│
+│ Total │ 2417│ 35%│
+│ ╶──────────────────────────┼─────┼──────┤
+│ Somewhat S3a. Male │ 262│ 4%│
+│ unlikely GENDER: Female│ 168│ 2%│
+│ Total │ 430│ 6%│
+│ ╶──────────────────────────┼─────┼──────┤
+│ Very S3a. Male │ 81│ 1%│
+│ unlikely GENDER: Female│ 59│ 1%│
+│ Total │ 140│ 2%│
+├─────────────────────────────────────────────────────────────────┼─────┼──────┤
+│105b. How likely is it that drivers Almost S3a. Male │ 539│ 8%│
+│who have had too much to drink to certain GENDER: Female│ 610│ 9%│
+│drive safely will C. Be convicted for Total │ 1149│ 17%│
+│drunk driving? ╶──────────────────────────┼─────┼──────┤
+│ Very S3a. Male │ 988│ 14%│
+│ likely GENDER: Female│ 1049│ 15%│
+│ Total │ 2037│ 30%│
+│ ╶──────────────────────────┼─────┼──────┤
+│ Somewhat S3a. Male │ 822│ 12%│
+│ likely GENDER: Female│ 1210│ 18%│
+│ Total │ 2032│ 30%│
+│ ╶──────────────────────────┼─────┼──────┤
+│ Somewhat S3a. Male │ 446│ 7%│
+│ unlikely GENDER: Female│ 548│ 8%│
+│ Total │ 994│ 15%│
+│ ╶──────────────────────────┼─────┼──────┤
+│ Very S3a. Male │ 268│ 4%│
+│ unlikely GENDER: Female│ 354│ 5%│
+│ Total │ 622│ 9%│
+├─────────────────────────────────────────────────────────────────┼─────┼──────┤
+│105b. How likely is it that drivers Almost S3a. Male │ 498│ 7%│
+│who have had too much to drink to certain GENDER: Female│ 603│ 9%│
+│drive safely will D. Be arrested for Total │ 1101│ 16%│
+│drunk driving? ╶──────────────────────────┼─────┼──────┤
+│ Very S3a. Male │ 805│ 12%│
+│ likely GENDER: Female│ 1029│ 15%│
+│ Total │ 1834│ 27%│
+│ ╶──────────────────────────┼─────┼──────┤
+│ Somewhat S3a. Male │ 975│ 14%│
+│ likely GENDER: Female│ 1332│ 19%│
+│ Total │ 2307│ 34%│
+│ ╶──────────────────────────┼─────┼──────┤
+│ Somewhat S3a. Male │ 535│ 8%│
+│ unlikely GENDER: Female│ 560│ 8%│
+│ Total │ 1095│ 16%│
+│ ╶──────────────────────────┼─────┼──────┤
+│ Very S3a. Male │ 270│ 4%│
+│ unlikely GENDER: Female│ 279│ 4%│
+│ Total │ 549│ 8%│
+╰─────────────────────────────────────────────────────────────────┴─────┴──────╯
Custom Tables
╭─────────────────────────────────┬────────┬──────┬─────────┬─────────┬────────╮
│ drive safely will │ │ │ │ │ │
│ A. Get stopped by │ │ │ │ │ │
│ the police? │ │ │ │ │ │
+│ ╶─────────────────────────┼────────┼──────┼─────────┼─────────┼────────┤
+│ Total 105b. How likely │ 10%│ 22%│ 40%│ 19%│ 9%│
+│ is it that drivers│ │ │ │ │ │
+│ who have had too │ │ │ │ │ │
+│ much to drink to │ │ │ │ │ │
+│ drive safely will │ │ │ │ │ │
+│ A. Get stopped by │ │ │ │ │ │
+│ the police? │ │ │ │ │ │
├─────────────────────────────────┼────────┼──────┼─────────┼─────────┼────────┤
│S3a. Male 105b. How likely │ 6%│ 16%│ 17%│ 4%│ 1%│
│GENDER: is it that drivers│ │ │ │ │ │
│ drive safely will │ │ │ │ │ │
│ B. Have an │ │ │ │ │ │
│ accident? │ │ │ │ │ │
+│ ╶─────────────────────────┼────────┼──────┼─────────┼─────────┼────────┤
+│ Total 105b. How likely │ 16%│ 41%│ 35%│ 6%│ 2%│
+│ is it that drivers│ │ │ │ │ │
+│ who have had too │ │ │ │ │ │
+│ much to drink to │ │ │ │ │ │
+│ drive safely will │ │ │ │ │ │
+│ B. Have an │ │ │ │ │ │
+│ accident? │ │ │ │ │ │
├─────────────────────────────────┼────────┼──────┼─────────┼─────────┼────────┤
│S3a. Male 105b. How likely │ 8%│ 14%│ 12%│ 7%│ 4%│
│GENDER: is it that drivers│ │ │ │ │ │
│ drive safely will │ │ │ │ │ │
│ C. Be convicted │ │ │ │ │ │
│ for drunk driving?│ │ │ │ │ │
+│ ╶─────────────────────────┼────────┼──────┼─────────┼─────────┼────────┤
+│ Total 105b. How likely │ 17%│ 30%│ 30%│ 15%│ 9%│
+│ is it that drivers│ │ │ │ │ │
+│ who have had too │ │ │ │ │ │
+│ much to drink to │ │ │ │ │ │
+│ drive safely will │ │ │ │ │ │
+│ C. Be convicted │ │ │ │ │ │
+│ for drunk driving?│ │ │ │ │ │
├─────────────────────────────────┼────────┼──────┼─────────┼─────────┼────────┤
│S3a. Male 105b. How likely │ 7%│ 12%│ 14%│ 8%│ 4%│
│GENDER: is it that drivers│ │ │ │ │ │
│ drive safely will │ │ │ │ │ │
│ D. Be arrested for│ │ │ │ │ │
│ drunk driving? │ │ │ │ │ │
+│ ╶─────────────────────────┼────────┼──────┼─────────┼─────────┼────────┤
+│ Total 105b. How likely │ 16%│ 27%│ 34%│ 16%│ 8%│
+│ is it that drivers│ │ │ │ │ │
+│ who have had too │ │ │ │ │ │
+│ much to drink to │ │ │ │ │ │
+│ drive safely will │ │ │ │ │ │
+│ D. Be arrested for│ │ │ │ │ │
+│ drunk driving? │ │ │ │ │ │
╰─────────────────────────────────┴────────┴──────┴─────────┴─────────┴────────╯
])
AT_CLEANUP
[[GET 'nhtsa.sav'.
CTABLES /TABLE=qnd1 > qn1 BY qns3a.
CTABLES /TABLE=qnd1 [MINIMUM, MAXIMUM, MEAN] > qns3a > (qn26 + qn27).
-CTABLES /TABLE=qnsa1 > qn105ba [COLPCT] BY qns1.
+CTABLES /TABLE=qnsa1 > qn105ba [COLPCT] BY qns1
+ /CATEGORIES VAR=qnsa1 EMPTY=EXCLUDE.
CTABLES /TABLE=AgeGroup > qn20 [MEAN F8.1, STDDEV F8.1].
]])
AT_CHECK([pspp ctables.sps -O box=unicode -O width=80], [0], [dnl
╰─────────────────────────────────────────────────────────┴───────┴───────┴────╯
Custom Tables
-╭──────────────────────────────────┬───────────────────────────────────────────╮
-│ │S1. Including yourself, how many members of│
-│ │ this household are age 16 or older? │
-│ ├──────┬───────┬──────┬──────┬───────┬──────┤
-│ │ │ │ │ │ │ 6 or │
-│ │ 1 │ 2 │ 3 │ 4 │ 5 │ more │
-│ ├──────┼───────┼──────┼──────┼───────┼──────┤
-│ │Column│ Column│Column│Column│ Column│Column│
-│ │ % │ % │ % │ % │ % │ % │
-├──────────────────────────────────┼──────┼───────┼──────┼──────┼───────┼──────┤
-│Sa1. RDD 105b. How Almost │ 9.5%│ 8.2%│ 12.4%│ 9.9%│ 20.0%│ 23.8%│
-│SAMPLE likely is it certain │ │ │ │ │ │ │
-│SOURCE: that drivers Very │ 24.9%│ 18.5%│ 24.0%│ 26.6%│ 25.5%│ 33.3%│
-│ who have had likely │ │ │ │ │ │ │
-│ too much to Somewhat│ 38.3%│ 41.9%│ 38.6%│ 37.5%│ 36.4%│ 23.8%│
-│ drink to likely │ │ │ │ │ │ │
-│ drive safely Somewhat│ 18.1%│ 21.7%│ 16.8%│ 16.7%│ 10.9%│ 9.5%│
-│ will A. Get unlikely│ │ │ │ │ │ │
-│ stopped by Very │ 9.2%│ 9.7%│ 8.2%│ 9.4%│ 7.3%│ 9.5%│
-│ the police? unlikely│ │ │ │ │ │ │
-╰──────────────────────────────────┴──────┴───────┴──────┴──────┴───────┴──────╯
+╭─────────────────────────────┬────────────────────────────────────────────────╮
+│ │S1. Including yourself, how many members of this│
+│ │ household are age 16 or older? │
+│ ├──────┬──────┬──────┬──────┬──────┬──────┬──────┤
+│ │ │ │ │ │ │ │ 6 or │
+│ │ None │ 1 │ 2 │ 3 │ 4 │ 5 │ more │
+│ ├──────┼──────┼──────┼──────┼──────┼──────┼──────┤
+│ │Column│Column│Column│Column│Column│Column│Column│
+│ │ % │ % │ % │ % │ % │ % │ % │
+├─────────────────────────────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┤
+│Sa1. RDD 105b. Almost │ .│ 9.5%│ 8.2%│ 12.4%│ 9.9%│ 20.0%│ 23.8%│
+│SAMPLE How certain │ │ │ │ │ │ │ │
+│SOURCE: likely │ │ │ │ │ │ │ │
+│ is it Very │ .│ 24.9%│ 18.5%│ 24.0%│ 26.6%│ 25.5%│ 33.3%│
+│ that likely │ │ │ │ │ │ │ │
+│ drivers │ │ │ │ │ │ │ │
+│ who have │ │ │ │ │ │ │ │
+│ had too Somewhat│ .│ 38.3%│ 41.9%│ 38.6%│ 37.5%│ 36.4%│ 23.8%│
+│ much to likely │ │ │ │ │ │ │ │
+│ drink to │ │ │ │ │ │ │ │
+│ drive │ │ │ │ │ │ │ │
+│ safely Somewhat│ .│ 18.1%│ 21.7%│ 16.8%│ 16.7%│ 10.9%│ 9.5%│
+│ will A. unlikely│ │ │ │ │ │ │ │
+│ Get │ │ │ │ │ │ │ │
+│ stopped Very │ .│ 9.2%│ 9.7%│ 8.2%│ 9.4%│ 7.3%│ 9.5%│
+│ by the unlikely│ │ │ │ │ │ │ │
+│ police? │ │ │ │ │ │ │ │
+╰─────────────────────────────┴──────┴──────┴──────┴──────┴──────┴──────┴──────╯
Custom Tables
╭──────────────────────────────────────────────────────────────┬────┬──────────╮
╰────────────────────────────────────────────────────────────────────────┴─────╯
])
AT_CLEANUP
+
+AT_SETUP([CTABLES simple totals])
+AT_CHECK([ln $top_srcdir/examples/nhtsa.sav . || cp $top_srcdir/examples/nhtsa.sav .])
+AT_DATA([ctables.sps],
+[[GET 'nhtsa.sav'.
+CTABLES /TABLE=qn17
+ /CATEGORIES VARIABLES=qn17 TOTAL=YES LABEL='Number responding'.
+CTABLES /TABLE=region > qn18 [MEAN, COUNT]
+ /CATEGORIES VARIABLES=region TOTAL=YES LABEL='All regions'.
+]])
+AT_CHECK([pspp ctables.sps -O box=unicode -O width=80], [0], [dnl
+ Custom Tables
+╭────────────────────────────────────────────────────────────────────────┬─────╮
+│ │Count│
+├────────────────────────────────────────────────────────────────────────┼─────┤
+│17. When you drink alcoholic beverages, which ONE of OR, something else│ 2│
+│the following beverages do you drink MOST OFTEN? Beer │ 1073│
+│ Light beer │ 620│
+│ Wine │ 1418│
+│ Wine coolers │ 137│
+│ Hard liquor or │ 888│
+│ mixed drinks │ │
+│ Flavored malt │ 83│
+│ drinks │ │
+│ Number responding │ 4221│
+╰────────────────────────────────────────────────────────────────────────┴─────╯
+
+ Custom Tables
+╭───────────────────────────────────────────────────────────────────┬────┬─────╮
+│ │Mean│Count│
+├───────────────────────────────────────────────────────────────────┼────┼─────┤
+│Region NE 18. When you drink ANSWERFROM(QN17R1), about how │4.36│ 949│
+│ many ANSWERFROM(QN17R2) do you usually drink per │ │ │
+│ sitting? │ │ │
+│ ╶────────────────────────────────────────────────────────────┼────┼─────┤
+│ MW 18. When you drink ANSWERFROM(QN17R1), about how │4.67│ 1027│
+│ many ANSWERFROM(QN17R2) do you usually drink per │ │ │
+│ sitting? │ │ │
+│ ╶────────────────────────────────────────────────────────────┼────┼─────┤
+│ S 18. When you drink ANSWERFROM(QN17R1), about how │4.71│ 1287│
+│ many ANSWERFROM(QN17R2) do you usually drink per │ │ │
+│ sitting? │ │ │
+│ ╶────────────────────────────────────────────────────────────┼────┼─────┤
+│ W 18. When you drink ANSWERFROM(QN17R1), about how │4.69│ 955│
+│ many ANSWERFROM(QN17R2) do you usually drink per │ │ │
+│ sitting? │ │ │
+│ ╶────────────────────────────────────────────────────────────┼────┼─────┤
+│ All 18. When you drink ANSWERFROM(QN17R1), about how │4.62│ 4218│
+│ regions many ANSWERFROM(QN17R2) do you usually drink per │ │ │
+│ sitting? │ │ │
+╰───────────────────────────────────────────────────────────────────┴────┴─────╯
+])
+AT_CLEANUP
+
+AT_SETUP([CTABLES subtotals])
+AT_CHECK([ln $top_srcdir/examples/nhtsa.sav . || cp $top_srcdir/examples/nhtsa.sav .])
+AT_DATA([ctables.sps],
+[[GET 'nhtsa.sav'.
+CTABLES /TABLE=qn105ba BY qns1
+ /CATEGORIES VARIABLES=qns1 [1, 2, SUBTOTAL, 3, 4, 5, SUBTOTAL].
+CTABLES /TABLE=qn105ba [COLPCT] BY qns1
+ /CATEGORIES VARIABLES=qn105ba [1, 2, 3, SUBTOTAL, 4, 5, SUBTOTAL].
+CTABLES /TABLE=qn105ba BY qns1
+ /CATEGORIES VARIABLES=qn105ba [1, 2, 3, SUBTOTAL, 4, 5, SUBTOTAL]
+ /CATEGORIES VARIABLES=qns1 [1, 2, SUBTOTAL, 3, 4, 5, SUBTOTAL].
+]])
+AT_CHECK([pspp ctables.sps -O box=unicode -O width=120], [0], [dnl
+ Custom Tables
+╭─────────────────────────────────────────────────────────┬────────────────────────────────────────────────────────────╮
+│ │ S1. Including yourself, how many members of this household │
+│ │ are age 16 or older? │
+│ ├───────┬───────┬─────────┬───────┬────────┬──────┬──────────┤
+│ │ 1 │ 2 │ Subtotal│ 3 │ 4 │ 5 │ Subtotal │
+│ ├───────┼───────┼─────────┼───────┼────────┼──────┼──────────┤
+│ │ Count │ Count │ Count │ Count │ Count │ Count│ Count │
+├─────────────────────────────────────────────────────────┼───────┼───────┼─────────┼───────┼────────┼──────┼──────────┤
+│105b. How likely is it that drivers who have Almost │ 147│ 246│ 393│ 62│ 19│ 11│ 92│
+│had too much to drink to drive safely will A. certain │ │ │ │ │ │ │ │
+│Get stopped by the police? Very likely│ 384│ 552│ 936│ 120│ 51│ 14│ 185│
+│ Somewhat │ 590│ 1249│ 1839│ 193│ 72│ 20│ 285│
+│ likely │ │ │ │ │ │ │ │
+│ Somewhat │ 278│ 647│ 925│ 84│ 32│ 6│ 122│
+│ unlikely │ │ │ │ │ │ │ │
+│ Very │ 141│ 290│ 431│ 41│ 18│ 4│ 63│
+│ unlikely │ │ │ │ │ │ │ │
+╰─────────────────────────────────────────────────────────┴───────┴───────┴─────────┴───────┴────────┴──────┴──────────╯
+
+ Custom Tables
+╭────────────────────────────────────────────────────────┬─────────────────────────────────────────────────────────────╮
+│ │ S1. Including yourself, how many members of this household │
+│ │ are age 16 or older? │
+│ ├────────┬────────┬────────┬────────┬───────┬────────┬────────┤
+│ │ │ │ │ │ │ │ 6 or │
+│ │ None │ 1 │ 2 │ 3 │ 4 │ 5 │ more │
+│ ├────────┼────────┼────────┼────────┼───────┼────────┼────────┤
+│ │ │ │ │ │ Column│ │ │
+│ │Column %│Column %│Column %│Column %│ % │Column %│Column %│
+├────────────────────────────────────────────────────────┼────────┼────────┼────────┼────────┼───────┼────────┼────────┤
+│105b. How likely is it that drivers who have Almost │ .│ 9.5%│ 8.2%│ 12.4%│ 9.9%│ 20.0%│ 23.8%│
+│had too much to drink to drive safely will certain │ │ │ │ │ │ │ │
+│A. Get stopped by the police? Very likely│ .│ 24.9%│ 18.5%│ 24.0%│ 26.6%│ 25.5%│ 33.3%│
+│ Somewhat │ .│ 38.3%│ 41.9%│ 38.6%│ 37.5%│ 36.4%│ 23.8%│
+│ likely │ │ │ │ │ │ │ │
+│ Subtotal │ │ 72.8%│ 68.6%│ 75.0%│ 74.0%│ 81.8%│ 81.0%│
+│ Somewhat │ .│ 18.1%│ 21.7%│ 16.8%│ 16.7%│ 10.9%│ 9.5%│
+│ unlikely │ │ │ │ │ │ │ │
+│ Very │ .│ 9.2%│ 9.7%│ 8.2%│ 9.4%│ 7.3%│ 9.5%│
+│ unlikely │ │ │ │ │ │ │ │
+│ Subtotal │ │ 27.2%│ 31.4%│ 25.0%│ 26.0%│ 18.2%│ 19.0%│
+╰────────────────────────────────────────────────────────┴────────┴────────┴────────┴────────┴───────┴────────┴────────╯
+
+ Custom Tables
+╭─────────────────────────────────────────────────────────┬────────────────────────────────────────────────────────────╮
+│ │ S1. Including yourself, how many members of this household │
+│ │ are age 16 or older? │
+│ ├───────┬───────┬─────────┬───────┬────────┬──────┬──────────┤
+│ │ 1 │ 2 │ Subtotal│ 3 │ 4 │ 5 │ Subtotal │
+│ ├───────┼───────┼─────────┼───────┼────────┼──────┼──────────┤
+│ │ Count │ Count │ Count │ Count │ Count │ Count│ Count │
+├─────────────────────────────────────────────────────────┼───────┼───────┼─────────┼───────┼────────┼──────┼──────────┤
+│105b. How likely is it that drivers who have Almost │ 147│ 246│ 393│ 62│ 19│ 11│ 92│
+│had too much to drink to drive safely will A. certain │ │ │ │ │ │ │ │
+│Get stopped by the police? Very likely│ 384│ 552│ 936│ 120│ 51│ 14│ 185│
+│ Somewhat │ 590│ 1249│ 1839│ 193│ 72│ 20│ 285│
+│ likely │ │ │ │ │ │ │ │
+│ Subtotal │ 1121│ 2047│ 3168│ 375│ 142│ 45│ 562│
+│ Somewhat │ 278│ 647│ 925│ 84│ 32│ 6│ 122│
+│ unlikely │ │ │ │ │ │ │ │
+│ Very │ 141│ 290│ 431│ 41│ 18│ 4│ 63│
+│ unlikely │ │ │ │ │ │ │ │
+│ Subtotal │ 419│ 937│ 1356│ 125│ 50│ 10│ 185│
+╰─────────────────────────────────────────────────────────┴───────┴───────┴─────────┴───────┴────────┴──────┴──────────╯
+])
+AT_CLEANUP
+
+AT_SETUP([CTABLES PCOMPUTE])
+AT_CHECK([ln $top_srcdir/examples/nhtsa.sav . || cp $top_srcdir/examples/nhtsa.sav .])
+AT_DATA([ctables.sps],
+[[GET 'nhtsa.sav'.
+CTABLES
+ /PCOMPUTE &x=EXPR([3] + [4])
+ /PCOMPUTE &y=EXPR([4] + [5])
+ /PPROPERTIES &x LABEL='3+4' HIDESOURCECATS=YES
+ /PPROPERTIES &y LABEL='4+5'
+ /TABLE=qn105ba BY qns1
+ /CATEGORIES VARIABLES=qns1 [1, 2, SUBTOTAL, 3, 4, 5, &x, &y, SUBTOTAL]
+]])
+AT_CHECK([pspp ctables.sps -O box=unicode -O width=120], [0], [dnl
+ Custom Tables
+╭─────────────────────────────────────────────────────────┬────────────────────────────────────────────────────────────╮
+│ │ S1. Including yourself, how many members of this household │
+│ │ are age 16 or older? │
+│ ├───────┬───────┬─────────┬───────┬────────┬──────┬──────────┤
+│ │ 1 │ 2 │ Subtotal│ 5 │ 3+4 │ 4+5 │ Subtotal │
+│ ├───────┼───────┼─────────┼───────┼────────┼──────┼──────────┤
+│ │ Count │ Count │ Count │ Count │ Count │ Count│ Count │
+├─────────────────────────────────────────────────────────┼───────┼───────┼─────────┼───────┼────────┼──────┼──────────┤
+│105b. How likely is it that drivers who have Almost │ 147│ 246│ 393│ 11│ 81│ 30│ 92│
+│had too much to drink to drive safely will A. certain │ │ │ │ │ │ │ │
+│Get stopped by the police? Very likely│ 384│ 552│ 936│ 14│ 171│ 65│ 185│
+│ Somewhat │ 590│ 1249│ 1839│ 20│ 265│ 92│ 285│
+│ likely │ │ │ │ │ │ │ │
+│ Somewhat │ 278│ 647│ 925│ 6│ 116│ 38│ 122│
+│ unlikely │ │ │ │ │ │ │ │
+│ Very │ 141│ 290│ 431│ 4│ 59│ 22│ 63│
+│ unlikely │ │ │ │ │ │ │ │
+╰─────────────────────────────────────────────────────────┴───────┴───────┴─────────┴───────┴────────┴──────┴──────────╯
+])
+AT_CLEANUP