dnl Features not yet tested:
dnl - Preprocessing to distinguish categorical from scale.
dnl - Testing details of missing value handling in summaries.
-dnl - test CLABELS ROWLABELS=LAYER.
-dnl - Test VLABELS.
dnl - Test WEIGHT and adjustment weights.
dnl - Summary functions:
dnl * Separate summary functions for totals and subtotals.
dnl * )CILEVEL in summary label specification
-dnl Category sorting:
-dnl * VALUE
-dnl * LABEL
-dnl * ascending/descending
dnl - CATEGORIES:
dnl * Date values
dnl * THRU (numeric ranges)
dnl * OTHERNM
-dnl - FORMAT:
-dnl * MINCOLWIDTH, MAXCOLWIDTH, UNITS.
-dnl * EMPTY.
-dnl * MISSING.
-dnl - HIDESMALLCOUNTS.
dnl - Date/time variables and values
-dnl - Special formats for summary functions: NEGPAREN, NEQUAL, PAREN, PCTPAREN.
-dnl - TITLES: )DATE, )TIME, )TABLE.
dnl - Test PCOMPUTE:
dnl * PCOMPUTE for more than one kind of summary (e.g. [COUNT, ROWPCT]).
dnl * MISSING, OTHERNM
specification as format DATETIME: Day (123) must be between 1 and 31..
100 | CTABLES /TABLE qn1 /CATEGORIES VARIABLES=datetime ['123'].
| ^~~~~
-
-ctables.sps:23: error: CTABLES: Summaries may appear only on one axis.
-
-ctables.sps:23.16-23.20: note: CTABLES: This variable on the rows axis has a
-summary.
- 23 | CTABLES /TABLE qn113 [COUNT] BY qn114 [COUNT] BY qn116 [COUNT].
- | ^~~~~
-
-ctables.sps:23.33-23.37: note: CTABLES: This variable on the columns axis has a
-summary.
- 23 | CTABLES /TABLE qn113 [COUNT] BY qn114 [COUNT] BY qn116 [COUNT].
- | ^~~~~
-
-ctables.sps:23.50-23.54: note: CTABLES: This variable on the layers axis has a
-summary.
- 23 | CTABLES /TABLE qn113 [COUNT] BY qn114 [COUNT] BY qn116 [COUNT].
- | ^~~~~
]])
AT_CLEANUP
ctables.sps:23: error: CTABLES: Summaries may appear only on one axis.
+ctables.sps:23.50-23.54: note: CTABLES: This variable on the layers axis has a
+summary.
+ 23 | CTABLES /TABLE qn113 [COUNT] BY qn114 [COUNT] BY qn116 [COUNT].
+ | ^~~~~
+
ctables.sps:23.16-23.20: note: CTABLES: This variable on the rows axis has a
summary.
23 | CTABLES /TABLE qn113 [COUNT] BY qn114 [COUNT] BY qn116 [COUNT].
23 | CTABLES /TABLE qn113 [COUNT] BY qn114 [COUNT] BY qn116 [COUNT].
| ^~~~~
-ctables.sps:23.50-23.54: note: CTABLES: This variable on the layers axis has a
-summary.
+ctables.sps:23.33-23.37: note: CTABLES: This is a scale variable, so it always
+has a summary even if the syntax does not explicitly specify one.
23 | CTABLES /TABLE qn113 [COUNT] BY qn114 [COUNT] BY qn116 [COUNT].
- | ^~~~~
+ | ^~~~~
]])
AT_CLEANUP
])
AT_CLEANUP
+AT_SETUP([CTABLES sorting categories])
+AT_CHECK([ln $top_srcdir/examples/nhtsa.sav . || cp $top_srcdir/examples/nhtsa.sav .])
+AT_DATA([ctables.sps],
+[[GET 'nhtsa.sav'.
+IF (QND5A=6) QND5A=-1.
+IF (QND5A=5) QND5A=-2.
+CTABLES /TABLE qnd5a /CATEGORIES VARIABLES=qnd5a KEY=VALUE ORDER=A
+ /TABLE qnd5a /CATEGORIES VARIABLES=qnd5a KEY=VALUE ORDER=D
+ /TABLE qnd5a /CATEGORIES VARIABLES=qnd5a KEY=LABEL ORDER=A
+ /TABLE qnd5a /CATEGORIES VARIABLES=qnd5a KEY=LABEL ORDER=D.
+]])
+AT_CHECK([pspp ctables.sps -O box=unicode -O width=80], [0], [dnl
+ Custom Tables
+╭────────────────────────────────────────────────────────────────────────┬─────╮
+│ │Count│
+├────────────────────────────────────────────────────────────────────────┼─────┤
+│D5a. What would you say is your primary ethnic -2.00 │ 52│
+│background? -1.00 │ 78│
+│ Cuban │ 20│
+│ Mexican │ 311│
+│ Spanish │ 48│
+│ South American │ 34│
+│ Central American │ 0│
+│ Puerto Rican, OR │ 0│
+│ Something else │ 68│
+│ Multiple - cannot choose│ 7│
+│ one │ │
+╰────────────────────────────────────────────────────────────────────────┴─────╯
+
+ Custom Tables
+╭────────────────────────────────────────────────────────────────────────┬─────╮
+│ │Count│
+├────────────────────────────────────────────────────────────────────────┼─────┤
+│D5a. What would you say is your primary ethnic Multiple - cannot choose│ 7│
+│background? one │ │
+│ Something else │ 68│
+│ Puerto Rican, OR │ 0│
+│ Central American │ 0│
+│ South American │ 34│
+│ Spanish │ 48│
+│ Mexican │ 311│
+│ Cuban │ 20│
+│ -1.00 │ 78│
+│ -2.00 │ 52│
+╰────────────────────────────────────────────────────────────────────────┴─────╯
+
+ Custom Tables
+╭────────────────────────────────────────────────────────────────────────┬─────╮
+│ │Count│
+├────────────────────────────────────────────────────────────────────────┼─────┤
+│D5a. What would you say is your primary ethnic Central American │ 0│
+│background? Cuban │ 20│
+│ Mexican │ 311│
+│ Multiple - cannot choose│ 7│
+│ one │ │
+│ Puerto Rican, OR │ 0│
+│ Something else │ 68│
+│ South American │ 34│
+│ Spanish │ 48│
+│ -2.00 │ 52│
+│ -1.00 │ 78│
+╰────────────────────────────────────────────────────────────────────────┴─────╯
+
+ Custom Tables
+╭────────────────────────────────────────────────────────────────────────┬─────╮
+│ │Count│
+├────────────────────────────────────────────────────────────────────────┼─────┤
+│D5a. What would you say is your primary ethnic Spanish │ 48│
+│background? South American │ 34│
+│ Something else │ 68│
+│ Puerto Rican, OR │ 0│
+│ Multiple - cannot choose│ 7│
+│ one │ │
+│ Mexican │ 311│
+│ Cuban │ 20│
+│ Central American │ 0│
+│ -1.00 │ 78│
+│ -2.00 │ 52│
+╰────────────────────────────────────────────────────────────────────────┴─────╯
+])
+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],
AT_CHECK([ln $top_srcdir/examples/nhtsa.sav . || cp $top_srcdir/examples/nhtsa.sav .])
AT_DATA([ctables.sps],
[[GET 'nhtsa.sav'.
+CTABLES /TABLE AgeGroup BY qns3a.
CTABLES /TABLE AgeGroup BY qns3a /CLABELS ROWLABELS=OPPOSITE.
CTABLES /TABLE AgeGroup BY qns3a /CLABELS COLLABELS=OPPOSITE.
+CTABLES /TABLE AgeGroup BY qns3a /CLABELS ROWLABELS=LAYER.
+CTABLES /TABLE AgeGroup BY qns3a /CLABELS COLLABELS=LAYER.
]])
-AT_CHECK([pspp ctables.sps -O box=unicode -O width=120], [0], [dnl
+pwd
+AT_CHECK([pspp ctables.sps --table-look="$builddir"/all-layers.stt -O box=unicode -O width=120], [0], [dnl
+ Custom Tables
+╭───────────────────────┬────────────╮
+│ │S3a. GENDER:│
+│ ├─────┬──────┤
+│ │ Male│Female│
+│ ├─────┼──────┤
+│ │Count│ Count│
+├───────────────────────┼─────┼──────┤
+│Age group 15 or younger│ 0│ 0│
+│ 16 to 25 │ 594│ 505│
+│ 26 to 35 │ 476│ 491│
+│ 36 to 45 │ 489│ 548│
+│ 46 to 55 │ 526│ 649│
+│ 56 to 65 │ 516│ 731│
+│ 66 or older │ 531│ 943│
+╰───────────────────────┴─────┴──────╯
+
Custom Tables
╭───────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ │ S3a. GENDER: │
│ 66 or older Male │ 531│
│ Female│ 943│
╰──────────────────────────────┴────────────╯
+
+ Custom Tables
+15 or younger
+╭─────────┬────────────╮
+│ │S3a. GENDER:│
+│ ├─────┬──────┤
+│ │ Male│Female│
+│ ├─────┼──────┤
+│ │Count│ Count│
+├─────────┼─────┼──────┤
+│Age group│ 0│ 0│
+╰─────────┴─────┴──────╯
+
+ Custom Tables
+16 to 25
+╭─────────┬────────────╮
+│ │S3a. GENDER:│
+│ ├─────┬──────┤
+│ │ Male│Female│
+│ ├─────┼──────┤
+│ │Count│ Count│
+├─────────┼─────┼──────┤
+│Age group│ 594│ 505│
+╰─────────┴─────┴──────╯
+
+ Custom Tables
+26 to 35
+╭─────────┬────────────╮
+│ │S3a. GENDER:│
+│ ├─────┬──────┤
+│ │ Male│Female│
+│ ├─────┼──────┤
+│ │Count│ Count│
+├─────────┼─────┼──────┤
+│Age group│ 476│ 491│
+╰─────────┴─────┴──────╯
+
+ Custom Tables
+36 to 45
+╭─────────┬────────────╮
+│ │S3a. GENDER:│
+│ ├─────┬──────┤
+│ │ Male│Female│
+│ ├─────┼──────┤
+│ │Count│ Count│
+├─────────┼─────┼──────┤
+│Age group│ 489│ 548│
+╰─────────┴─────┴──────╯
+
+ Custom Tables
+46 to 55
+╭─────────┬────────────╮
+│ │S3a. GENDER:│
+│ ├─────┬──────┤
+│ │ Male│Female│
+│ ├─────┼──────┤
+│ │Count│ Count│
+├─────────┼─────┼──────┤
+│Age group│ 526│ 649│
+╰─────────┴─────┴──────╯
+
+ Custom Tables
+56 to 65
+╭─────────┬────────────╮
+│ │S3a. GENDER:│
+│ ├─────┬──────┤
+│ │ Male│Female│
+│ ├─────┼──────┤
+│ │Count│ Count│
+├─────────┼─────┼──────┤
+│Age group│ 516│ 731│
+╰─────────┴─────┴──────╯
+
+ Custom Tables
+66 or older
+╭─────────┬────────────╮
+│ │S3a. GENDER:│
+│ ├─────┬──────┤
+│ │ Male│Female│
+│ ├─────┼──────┤
+│ │Count│ Count│
+├─────────┼─────┼──────┤
+│Age group│ 531│ 943│
+╰─────────┴─────┴──────╯
+
+ Custom Tables
+Male
+╭───────────────────────┬────────────╮
+│ │S3a. GENDER:│
+│ ├────────────┤
+│ │ Count │
+├───────────────────────┼────────────┤
+│Age group 15 or younger│ 0│
+│ 16 to 25 │ 594│
+│ 26 to 35 │ 476│
+│ 36 to 45 │ 489│
+│ 46 to 55 │ 526│
+│ 56 to 65 │ 516│
+│ 66 or older │ 531│
+╰───────────────────────┴────────────╯
+
+ Custom Tables
+Female
+╭───────────────────────┬────────────╮
+│ │S3a. GENDER:│
+│ ├────────────┤
+│ │ Count │
+├───────────────────────┼────────────┤
+│Age group 15 or younger│ 0│
+│ 16 to 25 │ 505│
+│ 26 to 35 │ 491│
+│ 36 to 45 │ 548│
+│ 46 to 55 │ 649│
+│ 56 to 65 │ 731│
+│ 66 or older │ 943│
+╰───────────────────────┴────────────╯
])
AT_CLEANUP
╰────────┴─────╯
])
AT_CLEANUP
+
+AT_SETUP([CTABLES VLABELS])
+AT_CHECK([ln $top_srcdir/examples/nhtsa.sav . || cp $top_srcdir/examples/nhtsa.sav .])
+AT_DATA([ctables.sps],
+[[GET 'nhtsa.sav'.
+CTABLES /VLABELS VARIABLES=qns3a qnd5a DISPLAY=DEFAULT /TABLE qnd5a BY qns3a.
+CTABLES /VLABELS VARIABLES=qns3a qnd5a DISPLAY=NAME /TABLE qnd5a BY qns3a.
+CTABLES /VLABELS VARIABLES=qns3a qnd5a DISPLAY=LABEL /TABLE qnd5a BY qns3a.
+CTABLES /VLABELS VARIABLES=qns3a qnd5a DISPLAY=BOTH /TABLE qnd5a BY qns3a.
+CTABLES /VLABELS VARIABLES=qns3a qnd5a DISPLAY=NONE /TABLE qnd5a BY qns3a.
+]])
+AT_CHECK([pspp ctables.sps -O box=unicode], [0], [dnl
+ Custom Tables
+╭────────────────────────────────────────────────────────────────┬────────────╮
+│ │S3a. GENDER:│
+│ ├─────┬──────┤
+│ │ Male│Female│
+│ ├─────┼──────┤
+│ │Count│ Count│
+├────────────────────────────────────────────────────────────────┼─────┼──────┤
+│D5a. What would you say is your primary Cuban │ 13│ 7│
+│ethnic background? Mexican │ 175│ 136│
+│ Spanish │ 20│ 28│
+│ South American │ 21│ 13│
+│ Central American │ 27│ 25│
+│ Puerto Rican, OR │ 37│ 41│
+│ Something else │ 35│ 33│
+│ Multiple - cannot │ 2│ 5│
+│ choose one │ │ │
+╰────────────────────────────────────────────────────────────────┴─────┴──────╯
+
+ Custom Tables
+╭──────────────────────────────────┬────────────╮
+│ │ QNS3A │
+│ ├─────┬──────┤
+│ │ Male│Female│
+│ ├─────┼──────┤
+│ │Count│ Count│
+├──────────────────────────────────┼─────┼──────┤
+│QND5A Cuban │ 13│ 7│
+│ Mexican │ 175│ 136│
+│ Spanish │ 20│ 28│
+│ South American │ 21│ 13│
+│ Central American │ 27│ 25│
+│ Puerto Rican, OR │ 37│ 41│
+│ Something else │ 35│ 33│
+│ Multiple - cannot choose one│ 2│ 5│
+╰──────────────────────────────────┴─────┴──────╯
+
+ Custom Tables
+╭────────────────────────────────────────────────────────────────┬────────────╮
+│ │S3a. GENDER:│
+│ ├─────┬──────┤
+│ │ Male│Female│
+│ ├─────┼──────┤
+│ │Count│ Count│
+├────────────────────────────────────────────────────────────────┼─────┼──────┤
+│D5a. What would you say is your primary Cuban │ 13│ 7│
+│ethnic background? Mexican │ 175│ 136│
+│ Spanish │ 20│ 28│
+│ South American │ 21│ 13│
+│ Central American │ 27│ 25│
+│ Puerto Rican, OR │ 37│ 41│
+│ Something else │ 35│ 33│
+│ Multiple - cannot │ 2│ 5│
+│ choose one │ │ │
+╰────────────────────────────────────────────────────────────────┴─────┴──────╯
+
+ Custom Tables
+╭────────────────────────────────────────────────────────────┬────────────────╮
+│ │ QNS3A S3a. │
+│ │ GENDER: │
+│ ├───────┬────────┤
+│ │ Male │ Female │
+│ ├───────┼────────┤
+│ │ Count │ Count │
+├────────────────────────────────────────────────────────────┼───────┼────────┤
+│QND5A D5a. What would you say is your Cuban │ 13│ 7│
+│primary ethnic background? Mexican │ 175│ 136│
+│ Spanish │ 20│ 28│
+│ South American │ 21│ 13│
+│ Central American │ 27│ 25│
+│ Puerto Rican, OR │ 37│ 41│
+│ Something else │ 35│ 33│
+│ Multiple - cannot │ 2│ 5│
+│ choose one │ │ │
+╰────────────────────────────────────────────────────────────┴───────┴────────╯
+
+ Custom Tables
+╭────────────────────────────┬─────┬──────╮
+│ │ Male│Female│
+│ ├─────┼──────┤
+│ │Count│ Count│
+├────────────────────────────┼─────┼──────┤
+│Cuban │ 13│ 7│
+│Mexican │ 175│ 136│
+│Spanish │ 20│ 28│
+│South American │ 21│ 13│
+│Central American │ 27│ 25│
+│Puerto Rican, OR │ 37│ 41│
+│Something else │ 35│ 33│
+│Multiple - cannot choose one│ 2│ 5│
+╰────────────────────────────┴─────┴──────╯
+])
+AT_CLEANUP
+
+AT_SETUP([CTABLES FORMAT EMPTY])
+AT_CHECK([ln $top_srcdir/examples/nhtsa.sav . || cp $top_srcdir/examples/nhtsa.sav .])
+AT_DATA([ctables.sps],
+[[GET 'nhtsa.sav'.
+CTABLES /FORMAT EMPTY=ZERO /TABLE qnd5a BY qnd5.
+CTABLES /FORMAT EMPTY=BLANK /TABLE qnd5a BY qnd5.
+CTABLES /FORMAT EMPTY='n/a' /TABLE qnd5a BY qnd5.
+]])
+AT_CHECK([pspp ctables.sps -O box=unicode], [0], [dnl
+ Custom Tables
+╭─────────────────────────────────────────────┬───────────────────────────────╮
+│ │ D5. ETHNICITY: Are you of │
+│ │ Hispanic or Latino origin or │
+│ │ descent? │
+│ ├───────────────┬───────────────┤
+│ │ Yes │ No │
+│ ├───────────────┼───────────────┤
+│ │ Count │ Count │
+├─────────────────────────────────────────────┼───────────────┼───────────────┤
+│D5a. What would you say is Cuban │ 20│ 0│
+│your primary ethnic Mexican │ 311│ 0│
+│background? Spanish │ 48│ 0│
+│ South American │ 34│ 0│
+│ Central American│ 52│ 0│
+│ Puerto Rican, OR│ 78│ 0│
+│ Something else │ 68│ 0│
+│ Multiple - │ 7│ 0│
+│ cannot choose │ │ │
+│ one │ │ │
+╰─────────────────────────────────────────────┴───────────────┴───────────────╯
+
+ Custom Tables
+╭─────────────────────────────────────────────┬───────────────────────────────╮
+│ │ D5. ETHNICITY: Are you of │
+│ │ Hispanic or Latino origin or │
+│ │ descent? │
+│ ├───────────────┬───────────────┤
+│ │ Yes │ No │
+│ ├───────────────┼───────────────┤
+│ │ Count │ Count │
+├─────────────────────────────────────────────┼───────────────┼───────────────┤
+│D5a. What would you say is Cuban │ 20│ │
+│your primary ethnic Mexican │ 311│ │
+│background? Spanish │ 48│ │
+│ South American │ 34│ │
+│ Central American│ 52│ │
+│ Puerto Rican, OR│ 78│ │
+│ Something else │ 68│ │
+│ Multiple - │ 7│ │
+│ cannot choose │ │ │
+│ one │ │ │
+╰─────────────────────────────────────────────┴───────────────┴───────────────╯
+
+ Custom Tables
+╭─────────────────────────────────────────────┬───────────────────────────────╮
+│ │ D5. ETHNICITY: Are you of │
+│ │ Hispanic or Latino origin or │
+│ │ descent? │
+│ ├───────────────┬───────────────┤
+│ │ Yes │ No │
+│ ├───────────────┼───────────────┤
+│ │ Count │ Count │
+├─────────────────────────────────────────────┼───────────────┼───────────────┤
+│D5a. What would you say is Cuban │ 20│n/a │
+│your primary ethnic Mexican │ 311│n/a │
+│background? Spanish │ 48│n/a │
+│ South American │ 34│n/a │
+│ Central American│ 52│n/a │
+│ Puerto Rican, OR│ 78│n/a │
+│ Something else │ 68│n/a │
+│ Multiple - │ 7│n/a │
+│ cannot choose │ │ │
+│ one │ │ │
+╰─────────────────────────────────────────────┴───────────────┴───────────────╯
+])
+AT_CLEANUP
+
+AT_SETUP([CTABLES FORMAT MISSING])
+AT_CHECK([ln $top_srcdir/examples/nhtsa.sav . || cp $top_srcdir/examples/nhtsa.sav .])
+AT_DATA([ctables.sps],
+[[GET 'nhtsa.sav'.
+CTABLES /FORMAT MISSING='(no data)' /TABLE qnd5a[COLPCT] BY qnd5.
+]])
+AT_CHECK([pspp ctables.sps -O box=unicode], [0], [dnl
+ Custom Tables
+╭─────────────────────────────────────────────┬───────────────────────────────╮
+│ │ D5. ETHNICITY: Are you of │
+│ │ Hispanic or Latino origin or │
+│ │ descent? │
+│ ├───────────────┬───────────────┤
+│ │ Yes │ No │
+│ ├───────────────┼───────────────┤
+│ │ Column % │ Column % │
+├─────────────────────────────────────────────┼───────────────┼───────────────┤
+│D5a. What would you say is Cuban │ 3.2%│(no data) │
+│your primary ethnic Mexican │ 50.3%│(no data) │
+│background? Spanish │ 7.8%│(no data) │
+│ South American │ 5.5%│(no data) │
+│ Central American│ 8.4%│(no data) │
+│ Puerto Rican, OR│ 12.6%│(no data) │
+│ Something else │ 11.0%│(no data) │
+│ Multiple - │ 1.1%│(no data) │
+│ cannot choose │ │ │
+│ one │ │ │
+╰─────────────────────────────────────────────┴───────────────┴───────────────╯
+])
+AT_CLEANUP
+
+AT_SETUP([CTABLES HIDESMALLCOUNTS])
+AT_CHECK([ln $top_srcdir/examples/nhtsa.sav . || cp $top_srcdir/examples/nhtsa.sav .])
+AT_DATA([ctables.sps],
+[[GET 'nhtsa.sav'.
+CTABLES /TABLE qn38[c][COUNT, COLPCT].
+CTABLES /HIDESMALLCOUNTS /TABLE qn38[c][COUNT, COLPCT].
+CTABLES /HIDESMALLCOUNTS COUNT=10 /TABLE qn38[c][COUNT, COLPCT].
+]])
+AT_CHECK([pspp ctables.sps -O box=unicode], [0], [dnl
+ Custom Tables
+╭──────────────────────────────────────────────────────────────┬─────┬────────╮
+│ │Count│Column %│
+├──────────────────────────────────────────────────────────────┼─────┼────────┤
+│38. How many drinks did you have on that Less than one│ 7│ .5%│
+│occasion? 1 │ 491│ 34.9%│
+│ 2 │ 462│ 32.9%│
+│ 3 │ 229│ 16.3%│
+│ 4 │ 82│ 5.8%│
+│ 5 │ 56│ 4.0%│
+│ 6 │ 32│ 2.3%│
+│ 7 │ 9│ .6%│
+│ 8 │ 8│ .6%│
+│ 9 │ 4│ .3%│
+│ 10 │ 6│ .4%│
+│ 11 │ 2│ .1%│
+│ 12 │ 5│ .4%│
+│ 14 │ 1│ .1%│
+│ 15 │ 1│ .1%│
+│ 18 │ 1│ .1%│
+│ 20 │ 4│ .3%│
+│ 25 │ 1│ .1%│
+│ 30 │ 3│ .2%│
+│ 60 │ 1│ .1%│
+│ 99+ │ 0│ .0%│
+╰──────────────────────────────────────────────────────────────┴─────┴────────╯
+
+ Custom Tables
+╭──────────────────────────────────────────────────────────────┬─────┬────────╮
+│ │Count│Column %│
+├──────────────────────────────────────────────────────────────┼─────┼────────┤
+│38. How many drinks did you have on that Less than one│ 7│ .5%│
+│occasion? 1 │ 491│ 34.9%│
+│ 2 │ 462│ 32.9%│
+│ 3 │ 229│ 16.3%│
+│ 4 │ 82│ 5.8%│
+│ 5 │ 56│ 4.0%│
+│ 6 │ 32│ 2.3%│
+│ 7 │ 9│ .6%│
+│ 8 │ 8│ .6%│
+│ 9 │<5 │ .3%│
+│ 10 │ 6│ .4%│
+│ 11 │<5 │ .1%│
+│ 12 │ 5│ .4%│
+│ 14 │<5 │ .1%│
+│ 15 │<5 │ .1%│
+│ 18 │<5 │ .1%│
+│ 20 │<5 │ .3%│
+│ 25 │<5 │ .1%│
+│ 30 │<5 │ .2%│
+│ 60 │<5 │ .1%│
+│ 99+ │<5 │ .0%│
+╰──────────────────────────────────────────────────────────────┴─────┴────────╯
+
+ Custom Tables
+╭──────────────────────────────────────────────────────────────┬─────┬────────╮
+│ │Count│Column %│
+├──────────────────────────────────────────────────────────────┼─────┼────────┤
+│38. How many drinks did you have on that Less than one│<10 │ .5%│
+│occasion? 1 │ 491│ 34.9%│
+│ 2 │ 462│ 32.9%│
+│ 3 │ 229│ 16.3%│
+│ 4 │ 82│ 5.8%│
+│ 5 │ 56│ 4.0%│
+│ 6 │ 32│ 2.3%│
+│ 7 │<10 │ .6%│
+│ 8 │<10 │ .6%│
+│ 9 │<10 │ .3%│
+│ 10 │<10 │ .4%│
+│ 11 │<10 │ .1%│
+│ 12 │<10 │ .4%│
+│ 14 │<10 │ .1%│
+│ 15 │<10 │ .1%│
+│ 18 │<10 │ .1%│
+│ 20 │<10 │ .3%│
+│ 25 │<10 │ .1%│
+│ 30 │<10 │ .2%│
+│ 60 │<10 │ .1%│
+│ 99+ │<10 │ .0%│
+╰──────────────────────────────────────────────────────────────┴─────┴────────╯
+])
+AT_CLEANUP
+
+AT_SETUP([CTABLES FORMAT MINCOLWIDTH MAXCOLWIDTH])
+AT_CHECK([ln $top_srcdir/examples/nhtsa.sav . || cp $top_srcdir/examples/nhtsa.sav .])
+AT_DATA([ctables.sps],
+[[GET 'nhtsa.sav'.
+CTABLES /FORMAT MINCOLWIDTH=1 MAXCOLWIDTH=2 UNITS=INCHES /TABLE BY qns3a.
+]])
+AT_CHECK([pspp ctables.sps -o - -O box=unicode -o pspp.spv], [0], [dnl
+ Custom Tables
+╭────────────╮
+│S3a. GENDER:│
+├─────┬──────┤
+│ Male│Female│
+├─────┼──────┤
+│Count│ Count│
+├─────┼──────┤
+│ 3132│ 3867│
+╰─────┴──────╯
+])
+AT_CHECK([pspp-output get-table-look pspp.spv pspp.stt])
+AT_CHECK([sed 's/ /\n/g' pspp.stt | grep ColumnWidth | sort], [0], [dnl
+maximumColumnWidth="192"
+minimumColumnWidth="96"
+])
+AT_CLEANUP
+
+AT_SETUP([CTABLES special formats])
+AT_KEYWORDS([NEGPAREN NEQUAL PAREN PCTPAREN])
+AT_CHECK([ln $top_srcdir/examples/nhtsa.sav . || cp $top_srcdir/examples/nhtsa.sav .])
+AT_DATA([ctables.sps],
+[[GET 'nhtsa.sav'.
+COMPUTE x = qnd3 - 4.
+CTABLES /TABLE x[MINIMUM NEGPAREN8.1, MINIMUM NEQUAL8.1, MINIMUM PAREN8.1, MINIMUM PCTPAREN8.1, MAXIMUM NEGPAREN8.1, MAXIMUM NEQUAL8.1, MAXIMUM PAREN8.1, MAXIMUM PCTPAREN8.1].
+]])
+AT_CHECK([pspp ctables.sps -O box=unicode], [0], [dnl
+ Custom Tables
+╭─┬───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────╮
+│ │Minimum│Minimum│Minimum│Minimum│Maximum│Maximum│Maximum│Maximum│
+├─┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┤
+│x│(3.0) │N=-3.0 │(-3.0) │(-3.0%)│8.0 │N=8.0 │(8.0) │(8.0%) │
+╰─┴───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────╯
+])
+AT_CLEANUP
+
+AT_SETUP([CTABLES TITLES])
+AT_CHECK([ln $top_srcdir/examples/nhtsa.sav . || cp $top_srcdir/examples/nhtsa.sav .])
+AT_DATA([ctables.sps],
+[[GET 'nhtsa.sav'.
+CTABLES
+ /VLABELS VARIABLES=qn1 DISPLAY=NONE
+ /TABLE ((qn1[c][COUNT])) BY qns3a[c] > qnd5
+ /TITLES TITLE='How often do you drive?'
+ CAPTION='Generated )TIME on )DATE'
+ CORNER=')TABLE'.
+]])
+AT_CHECK([pspp ctables.sps -O box=unicode | sed 's/..:..:../HH:MM:SS/
+s&../../..&MM/DD/YY&'], [0], [dnl
+ How often do you drive?
+╭───────────────────────────────────┬─────────────────────────────────────────╮
+│ │ S3a. GENDER: │
+│ ├────────────────────┬────────────────────┤
+│ │ Male │ Female │
+│ ├────────────────────┼────────────────────┤
+│ │ D5. ETHNICITY: Are │ D5. ETHNICITY: Are │
+│ │ you of Hispanic or │ you of Hispanic or │
+│ │ Latino origin or │ Latino origin or │
+│( ( 1. How often do you usually │ descent? │ descent? │
+│drive a car or other motor ├─────────┬──────────┼─────────┬──────────┤
+│vehicle?) ) BY S3a. GENDER: > D5. │ Yes │ No │ Yes │ No │
+│ETHNICITY: Are you of Hispanic or ├─────────┼──────────┼─────────┼──────────┤
+│Latino origin or descent? │ Count │ Count │ Count │ Count │
+├───────────────────────────────────┼─────────┼──────────┼─────────┼──────────┤
+│Every day │ 218│ 2066│ 166│ 2175│
+│Several days a week │ 44│ 391│ 45│ 782│
+│Once a week or less │ 16│ 109│ 12│ 223│
+│Only certain times a year │ 15│ 41│ 11│ 61│
+│Never │ 39│ 150│ 56│ 278│
+╰───────────────────────────────────┴─────────┴──────────┴─────────┴──────────╯
+Generated HH:MM:SS on MM/DD/YY
+])
+AT_CLEANUP
+
+AT_SETUP([CTABLES area definitions])
+AT_CHECK([ln $top_srcdir/examples/nhtsa.sav . || cp $top_srcdir/examples/nhtsa.sav .])
+AT_DATA([ctables.sps],
+[[GET 'nhtsa.sav'.
+CTABLES
+ /VLABELS VARIABLES=ALL DISPLAY=NAME
+ /TABLE qn61 > qn57 BY qnd7a > qn86 + qn64b BY qns3a[TABLE.ID, LAYER.ID, SUBTABLE.ID]
+ /SLABELS POSITION=ROW
+ /TABLE qn61 > qn57 BY qnd7a > qn86 + qn64b BY qns3a[ROW.ID, LAYERROW.ID]
+ /SLABELS POSITION=ROW
+ /TABLE qn61 > qn57 BY qnd7a > qn86 + qn64b BY qns3a[COL.ID, LAYERCOL.ID]
+ /SLABELS POSITION=ROW.
+]])
+AT_CHECK([pspp ctables.sps --table-look="$builddir"/all-layers.stt -O box=unicode -O width=80], [0], [dnl
+ Custom Tables
+Male
+╭─────────────────────────────┬─────────────┬──────╮
+│ │ QND7A │ QN64B│
+│ ├──────┬──────┼───┬──┤
+│ │ Yes │ No │ │ │
+│ ├──────┼──────┤ │ │
+│ │ QN86 │ QN86 │ │ │
+│ ├───┬──┼───┬──┤ │ │
+│ │Yes│No│Yes│No│Yes│No│
+├─────────────────────────────┼───┼──┼───┼──┼───┼──┤
+│QN61 Yes QN57 Yes Table ID │ 1│ 1│ 1│ 1│ 2│ 2│
+│ Layer ID │ 1│ 1│ 1│ 1│ 2│ 2│
+│ Subtable ID│ 1│ 1│ 2│ 2│ 3│ 3│
+│ ╶───────────────┼───┼──┼───┼──┼───┼──┤
+│ No Table ID │ 1│ 1│ 1│ 1│ 2│ 2│
+│ Layer ID │ 1│ 1│ 1│ 1│ 2│ 2│
+│ Subtable ID│ 1│ 1│ 2│ 2│ 3│ 3│
+│ ╶────────────────────────┼───┼──┼───┼──┼───┼──┤
+│ No QN57 Yes Table ID │ 1│ 1│ 1│ 1│ 2│ 2│
+│ Layer ID │ 1│ 1│ 1│ 1│ 2│ 2│
+│ Subtable ID│ 4│ 4│ 5│ 5│ 6│ 6│
+│ ╶───────────────┼───┼──┼───┼──┼───┼──┤
+│ No Table ID │ 1│ 1│ 1│ 1│ 2│ 2│
+│ Layer ID │ 1│ 1│ 1│ 1│ 2│ 2│
+│ Subtable ID│ 4│ 4│ 5│ 5│ 6│ 6│
+╰─────────────────────────────┴───┴──┴───┴──┴───┴──╯
+
+ Custom Tables
+Female
+╭─────────────────────────────┬─────────────┬──────╮
+│ │ QND7A │ QN64B│
+│ ├──────┬──────┼───┬──┤
+│ │ Yes │ No │ │ │
+│ ├──────┼──────┤ │ │
+│ │ QN86 │ QN86 │ │ │
+│ ├───┬──┼───┬──┤ │ │
+│ │Yes│No│Yes│No│Yes│No│
+├─────────────────────────────┼───┼──┼───┼──┼───┼──┤
+│QN61 Yes QN57 Yes Table ID │ 1│ 1│ 1│ 1│ 2│ 2│
+│ Layer ID │ 3│ 3│ 3│ 3│ 4│ 4│
+│ Subtable ID│ 7│ 7│ 8│ 8│ 9│ 9│
+│ ╶───────────────┼───┼──┼───┼──┼───┼──┤
+│ No Table ID │ 1│ 1│ 1│ 1│ 2│ 2│
+│ Layer ID │ 3│ 3│ 3│ 3│ 4│ 4│
+│ Subtable ID│ 7│ 7│ 8│ 8│ 9│ 9│
+│ ╶────────────────────────┼───┼──┼───┼──┼───┼──┤
+│ No QN57 Yes Table ID │ 1│ 1│ 1│ 1│ 2│ 2│
+│ Layer ID │ 3│ 3│ 3│ 3│ 4│ 4│
+│ Subtable ID│ 10│10│ 11│11│ 12│12│
+│ ╶───────────────┼───┼──┼───┼──┼───┼──┤
+│ No Table ID │ 1│ 1│ 1│ 1│ 2│ 2│
+│ Layer ID │ 3│ 3│ 3│ 3│ 4│ 4│
+│ Subtable ID│ 10│10│ 11│11│ 12│12│
+╰─────────────────────────────┴───┴──┴───┴──┴───┴──╯
+
+ Custom Tables
+Male
+╭──────────────────────────────┬─────────────┬──────╮
+│ │ QND7A │ QN64B│
+│ ├──────┬──────┼───┬──┤
+│ │ Yes │ No │ │ │
+│ ├──────┼──────┤ │ │
+│ │ QN86 │ QN86 │ │ │
+│ ├───┬──┼───┬──┤ │ │
+│ │Yes│No│Yes│No│Yes│No│
+├──────────────────────────────┼───┼──┼───┼──┼───┼──┤
+│QN61 Yes QN57 Yes Row ID │ 1│ 1│ 2│ 2│ 3│ 3│
+│ Layer Row ID│ 1│ 1│ 1│ 1│ 2│ 2│
+│ ╶────────────────┼───┼──┼───┼──┼───┼──┤
+│ No Row ID │ 4│ 4│ 5│ 5│ 6│ 6│
+│ Layer Row ID│ 3│ 3│ 3│ 3│ 4│ 4│
+│ ╶─────────────────────────┼───┼──┼───┼──┼───┼──┤
+│ No QN57 Yes Row ID │ 7│ 7│ 8│ 8│ 9│ 9│
+│ Layer Row ID│ 5│ 5│ 5│ 5│ 6│ 6│
+│ ╶────────────────┼───┼──┼───┼──┼───┼──┤
+│ No Row ID │ 10│10│ 11│11│ 12│12│
+│ Layer Row ID│ 7│ 7│ 7│ 7│ 8│ 8│
+╰──────────────────────────────┴───┴──┴───┴──┴───┴──╯
+
+ Custom Tables
+Female
+╭──────────────────────────────┬─────────────┬──────╮
+│ │ QND7A │ QN64B│
+│ ├──────┬──────┼───┬──┤
+│ │ Yes │ No │ │ │
+│ ├──────┼──────┤ │ │
+│ │ QN86 │ QN86 │ │ │
+│ ├───┬──┼───┬──┤ │ │
+│ │Yes│No│Yes│No│Yes│No│
+├──────────────────────────────┼───┼──┼───┼──┼───┼──┤
+│QN61 Yes QN57 Yes Row ID │ 13│13│ 14│14│ 15│15│
+│ Layer Row ID│ 9│ 9│ 9│ 9│ 10│10│
+│ ╶────────────────┼───┼──┼───┼──┼───┼──┤
+│ No Row ID │ 16│16│ 17│17│ 18│18│
+│ Layer Row ID│ 11│11│ 11│11│ 12│12│
+│ ╶─────────────────────────┼───┼──┼───┼──┼───┼──┤
+│ No QN57 Yes Row ID │ 19│19│ 20│20│ 21│21│
+│ Layer Row ID│ 13│13│ 13│13│ 14│14│
+│ ╶────────────────┼───┼──┼───┼──┼───┼──┤
+│ No Row ID │ 22│22│ 23│23│ 24│24│
+│ Layer Row ID│ 15│15│ 15│15│ 16│16│
+╰──────────────────────────────┴───┴──┴───┴──┴───┴──╯
+
+ Custom Tables
+Male
+╭─────────────────────────────────┬─────────────┬──────╮
+│ │ QND7A │ QN64B│
+│ ├──────┬──────┼───┬──┤
+│ │ Yes │ No │ │ │
+│ ├──────┼──────┤ │ │
+│ │ QN86 │ QN86 │ │ │
+│ ├───┬──┼───┬──┤ │ │
+│ │Yes│No│Yes│No│Yes│No│
+├─────────────────────────────────┼───┼──┼───┼──┼───┼──┤
+│QN61 Yes QN57 Yes Column ID │ 1│ 2│ 3│ 4│ 5│ 6│
+│ Layer Column ID│ 1│ 2│ 3│ 4│ 5│ 6│
+│ ╶───────────────────┼───┼──┼───┼──┼───┼──┤
+│ No Column ID │ 1│ 2│ 3│ 4│ 5│ 6│
+│ Layer Column ID│ 1│ 2│ 3│ 4│ 5│ 6│
+│ ╶────────────────────────────┼───┼──┼───┼──┼───┼──┤
+│ No QN57 Yes Column ID │ 7│ 8│ 9│10│ 11│12│
+│ Layer Column ID│ 1│ 2│ 3│ 4│ 5│ 6│
+│ ╶───────────────────┼───┼──┼───┼──┼───┼──┤
+│ No Column ID │ 7│ 8│ 9│10│ 11│12│
+│ Layer Column ID│ 1│ 2│ 3│ 4│ 5│ 6│
+╰─────────────────────────────────┴───┴──┴───┴──┴───┴──╯
+
+ Custom Tables
+Female
+╭─────────────────────────────────┬─────────────┬──────╮
+│ │ QND7A │ QN64B│
+│ ├──────┬──────┼───┬──┤
+│ │ Yes │ No │ │ │
+│ ├──────┼──────┤ │ │
+│ │ QN86 │ QN86 │ │ │
+│ ├───┬──┼───┬──┤ │ │
+│ │Yes│No│Yes│No│Yes│No│
+├─────────────────────────────────┼───┼──┼───┼──┼───┼──┤
+│QN61 Yes QN57 Yes Column ID │ 13│14│ 15│16│ 17│18│
+│ Layer Column ID│ 7│ 8│ 9│10│ 11│12│
+│ ╶───────────────────┼───┼──┼───┼──┼───┼──┤
+│ No Column ID │ 13│14│ 15│16│ 17│18│
+│ Layer Column ID│ 7│ 8│ 9│10│ 11│12│
+│ ╶────────────────────────────┼───┼──┼───┼──┼───┼──┤
+│ No QN57 Yes Column ID │ 19│20│ 21│22│ 23│24│
+│ Layer Column ID│ 7│ 8│ 9│10│ 11│12│
+│ ╶───────────────────┼───┼──┼───┼──┼───┼──┤
+│ No Column ID │ 19│20│ 21│22│ 23│24│
+│ Layer Column ID│ 7│ 8│ 9│10│ 11│12│
+╰─────────────────────────────────┴───┴──┴───┴──┴───┴──╯
+])
+AT_CLEANUP
+
+AT_SETUP([CTABLES summary functions])
+AT_CHECK([ln $top_srcdir/examples/nhtsa.sav . || cp $top_srcdir/examples/nhtsa.sav .])
+AT_DATA([ctables.sps],
+[[GET 'nhtsa.sav'.
+CTABLES
+ /TABLE region > qnd5 + qnd6_1 BY qnd7a + agegroup BY qns3a[COUNT, ROWPCT, COLPCT, SUBTABLEPCT]
+ /SLABELS POSITION=ROW.
+]])
+AT_CHECK([pspp ctables.sps --table-look="$builddir"/all-layers.stt -O box=unicode -O width=120], [0], [])
+AT_CLEANUP
+