more summary testing
[pspp] / tests / language / stats / ctables.at
index 726da3d723c4e3fc50060a329306ead40e143f6c..6643abf84ef8341dc434d6031088284bac0ea314 100644 (file)
@@ -1,29 +1,11 @@
 AT_BANNER([CTABLES])
 
 dnl Features not yet tested:
-dnl - Preprocessing to distinguish categorical from scale.
-dnl - Testing details of missing value handling in summaries.
-dnl - Test WEIGHT and adjustment weights.
-dnl - Summary functions:
-dnl   * Separate summary functions for totals and subtotals.
-dnl   * )CILEVEL in summary label specification
-dnl - CATEGORIES:
-dnl   * Date values
-dnl   * THRU (numeric ranges)
-dnl   * OTHERNM
-dnl - Date/time variables and values
-dnl - Test PCOMPUTE:
-dnl   * PCOMPUTE for more than one kind of summary (e.g. [COUNT, ROWPCT]).
-dnl   * MISSING, OTHERNM
-dnl   * multi-dimensional (multiple CCT_POSTCOMPUTE in one cell)
-dnl   * dates
-dnl - PPROPERTIES:
-dnl   * )LABEL[N].
 dnl - Summary functions:
 dnl   * U-prefix for unweighted summaries.
 dnl   * areaPCT.SUM and UareaPCT.SUM functions.
-dnl - SPLIT FILE with SEPARATE splits
-dnl - Definition of columns/rows when labels are rotated from one axis to another.
+dnl   * WEIGHT and adjustment weights.
+dnl   * details of missing value handling in summaries.
 dnl
 dnl Not for v1:
 dnl - Multiple response sets
@@ -34,6 +16,8 @@ dnl - COMPARETEST
 dnl - Summary functions:
 dnl   * .LCL and .UCL suffixes.
 dnl   * .SE suffixes.
+dnl - Summary functions:
+dnl   * )CILEVEL in summary label specification
 dnl - CATEGORIES:
 dnl   * Data-dependent sorting.
 
@@ -841,6 +825,7 @@ D1. AGE: What is your age?
 AT_CLEANUP
 
 AT_SETUP([CTABLES simple stacking])
+AT_KEYWORDS([stack stacked])
 AT_CHECK([ln $top_srcdir/examples/nhtsa.sav . || cp $top_srcdir/examples/nhtsa.sav .])
 AT_DATA([ctables.sps],
 [[GET 'nhtsa.sav'.
@@ -1077,6 +1062,7 @@ AT_CHECK([pspp ctables.sps -O box=unicode -O width=80], [0], [dnl
 AT_CLEANUP
 
 AT_SETUP([CTABLES simple nesting])
+AT_KEYWORDS([nest nested])
 AT_CHECK([ln $top_srcdir/examples/nhtsa.sav . || cp $top_srcdir/examples/nhtsa.sav .])
 AT_DATA([ctables.sps],
 [[GET 'nhtsa.sav'.
@@ -1281,6 +1267,7 @@ AT_CHECK([pspp ctables.sps -O box=unicode -O width=80], [0], [dnl
 AT_CLEANUP
 
 AT_SETUP([CTABLES nesting and scale variables])
+AT_KEYWORDS([nest nested])
 AT_CHECK([ln $top_srcdir/examples/nhtsa.sav . || cp $top_srcdir/examples/nhtsa.sav .])
 AT_DATA([ctables.sps],
 [[GET 'nhtsa.sav'.
@@ -1609,37 +1596,267 @@ AT_CHECK([pspp ctables.sps -O box=unicode -O width=120], [0], [dnl
 AT_CLEANUP
 
 AT_SETUP([CTABLES PCOMPUTE])
+AT_KEYWORDS([postcompute])
 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 FORMAT=COUNT F8.2
-    /PPROPERTIES &y LABEL='4+5'
-    /TABLE=qn105ba BY qns1
-    /CATEGORIES VARIABLES=qns1 [1, 2, SUBTOTAL, 3, 4, 5, &x, &y, SUBTOTAL]
+    /PPROPERTIES &x LABEL='3+4' FORMAT=COUNT F8.2
+    /PPROPERTIES &y LABEL=')LABEL[5]+)LABEL[6]'
+    /TABLE=qn105ba [COUNT, ROWPCT] BY qns1
+    /CATEGORIES VARIABLES=qns1 [1, 2, SUBTOTAL, 3, 4, 5, &x, &y, SUBTOTAL] TOTAL=YES
+
+* Adding HIDESOURCECATS=YES for one PPROPERTIES.
+CTABLES
+    /PCOMPUTE &x=EXPR([3] + [4])
+    /PCOMPUTE &y=EXPR([4] + [5])
+    /PPROPERTIES &x LABEL='3+4' FORMAT=COUNT F8.2
+    /PPROPERTIES &y LABEL=')LABEL[5]+)LABEL[6]' HIDESOURCECATS=YES
+    /TABLE=qn105ba [COUNT, ROWPCT] BY qns1
+    /CATEGORIES VARIABLES=qns1 [1, 2, SUBTOTAL, 3, 4, 5, &x, &y, SUBTOTAL] TOTAL=YES
+]])
+AT_CHECK([pspp ctables.sps -O box=unicode -O width=140], [0], [dnl
+                                                                Custom Tables
+╭───────────────────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
+│                   │                    S1. Including yourself, how many members of this household are age 16 or older?                   │
+│                   ├───────────┬───────────┬───────────┬───────────┬──────────┬──────────┬────────────┬──────────┬───────────┬────────────┤
+│                   │     1     │     2     │  Subtotal │     3     │     4    │     5    │     3+4    │    4+5   │  Subtotal │    Total   │
+│                   ├─────┬─────┼─────┬─────┼─────┬─────┼─────┬─────┼─────┬────┼─────┬────┼──────┬─────┼─────┬────┼─────┬─────┼─────┬──────┤
+│                   │     │     │     │     │     │     │     │     │     │ Row│     │ Row│      │     │     │ Row│     │     │     │      │
+│                   │Count│Row %│Count│Row %│Count│Row %│Count│Row %│Count│  % │Count│  % │ Count│Row %│Count│  % │Count│Row %│Count│ Row %│
+├───────────────────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼────┼─────┼────┼──────┼─────┼─────┼────┼─────┼─────┼─────┼──────┤
+│105b. How  Almost  │  147│30.3%│  246│50.7%│  393│81.0%│   62│12.8%│   19│3.9%│   11│2.3%│ 81.00│16.7%│   30│6.2%│   92│19.0%│  485│100.0%│
+│likely is  certain │     │     │     │     │     │     │     │     │     │    │     │    │      │     │     │    │     │     │     │      │
+│it that            │     │     │     │     │     │     │     │     │     │    │     │    │      │     │     │    │     │     │     │      │
+│drivers    Very    │  384│34.3%│  552│49.2%│  936│83.5%│  120│10.7%│   51│4.5%│   14│1.2%│171.00│15.3%│   65│5.8%│  185│16.5%│ 1121│100.0%│
+│who have   likely  │     │     │     │     │     │     │     │     │     │    │     │    │      │     │     │    │     │     │     │      │
+│had too            │     │     │     │     │     │     │     │     │     │    │     │    │      │     │     │    │     │     │     │      │
+│much to    Somewhat│  590│27.8%│ 1249│58.8%│ 1839│86.6%│  193│ 9.1%│   72│3.4%│   20│ .9%│265.00│12.5%│   92│4.3%│  285│13.4%│ 2124│100.0%│
+│drink to   likely  │     │     │     │     │     │     │     │     │     │    │     │    │      │     │     │    │     │     │     │      │
+│drive              │     │     │     │     │     │     │     │     │     │    │     │    │      │     │     │    │     │     │     │      │
+│safely     Somewhat│  278│26.6%│  647│61.8%│  925│88.3%│   84│ 8.0%│   32│3.1%│    6│ .6%│116.00│11.1%│   38│3.6%│  122│11.7%│ 1047│100.0%│
+│will A.    unlikely│     │     │     │     │     │     │     │     │     │    │     │    │      │     │     │    │     │     │     │      │
+│Get                │     │     │     │     │     │     │     │     │     │    │     │    │      │     │     │    │     │     │     │      │
+│stopped by Very    │  141│28.5%│  290│58.7%│  431│87.2%│   41│ 8.3%│   18│3.6%│    4│ .8%│ 59.00│11.9%│   22│4.5%│   63│12.8%│  494│100.0%│
+│the        unlikely│     │     │     │     │     │     │     │     │     │    │     │    │      │     │     │    │     │     │     │      │
+│police?            │     │     │     │     │     │     │     │     │     │    │     │    │      │     │     │    │     │     │     │      │
+╰───────────────────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴────┴─────┴────┴──────┴─────┴─────┴────┴─────┴─────┴─────┴──────╯
+
+                                                                Custom Tables
+╭─────────────────────────────────────────┬────────────────────────────────────────────────────────────────────────────────────────────────╮
+│                                         │         S1. Including yourself, how many members of this household are age 16 or older?        │
+│                                         ├───────────┬───────────┬───────────┬───────────┬────────────┬──────────┬───────────┬────────────┤
+│                                         │     1     │     2     │  Subtotal │     3     │     3+4    │    4+5   │  Subtotal │    Total   │
+│                                         ├─────┬─────┼─────┬─────┼─────┬─────┼─────┬─────┼──────┬─────┼─────┬────┼─────┬─────┼─────┬──────┤
+│                                         │     │     │     │     │     │     │     │     │      │     │     │ Row│     │     │     │      │
+│                                         │Count│Row %│Count│Row %│Count│Row %│Count│Row %│ Count│Row %│Count│  % │Count│Row %│Count│ Row %│
+├─────────────────────────────────────────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼──────┼─────┼─────┼────┼─────┼─────┼─────┼──────┤
+│105b. How likely is it that    Almost    │  147│30.3%│  246│50.7%│  393│81.0%│   62│12.8%│ 81.00│16.7%│   30│6.2%│   92│19.0%│  485│100.0%│
+│drivers who have had too much  certain   │     │     │     │     │     │     │     │     │      │     │     │    │     │     │     │      │
+│to drink to drive safely will  Very      │  384│34.3%│  552│49.2%│  936│83.5%│  120│10.7%│171.00│15.3%│   65│5.8%│  185│16.5%│ 1121│100.0%│
+│A. Get stopped by the police?  likely    │     │     │     │     │     │     │     │     │      │     │     │    │     │     │     │      │
+│                               Somewhat  │  590│27.8%│ 1249│58.8%│ 1839│86.6%│  193│ 9.1%│265.00│12.5%│   92│4.3%│  285│13.4%│ 2124│100.0%│
+│                               likely    │     │     │     │     │     │     │     │     │      │     │     │    │     │     │     │      │
+│                               Somewhat  │  278│26.6%│  647│61.8%│  925│88.3%│   84│ 8.0%│116.00│11.1%│   38│3.6%│  122│11.7%│ 1047│100.0%│
+│                               unlikely  │     │     │     │     │     │     │     │     │      │     │     │    │     │     │     │      │
+│                               Very      │  141│28.5%│  290│58.7%│  431│87.2%│   41│ 8.3%│ 59.00│11.9%│   22│4.5%│   63│12.8%│  494│100.0%│
+│                               unlikely  │     │     │     │     │     │     │     │     │      │     │     │    │     │     │     │      │
+╰─────────────────────────────────────────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴──────┴─────┴─────┴────┴─────┴─────┴─────┴──────╯
+])
+AT_CLEANUP
+
+AT_SETUP([CTABLES PCOMPUTE - OTHERNM and MISSING])
+AT_KEYWORDS([postcompute])
+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(OTHERNM)
+    /PCOMPUTE &y=EXPR(MISSING)
+    /PPROPERTIES &x LABEL='Drivers'
+    /PPROPERTIES &y LABEL='Missing Values 2'
+    /TABLE=qn1 BY qns3a
+    /CATEGORIES VARIABLES=qn1 [OTHERNM, 5, &x, SUBTOTAL='Valid Values', MISSING, SUBTOTAL='Missing Values', &y]
+]])
+AT_CHECK([pspp ctables.sps -O box=unicode -O width=140], [0], [dnl
+                                              Custom Tables
+╭──────────────────────────────────────────────────────────────────────────────────────────┬────────────╮
+│                                                                                          │S3a. GENDER:│
+│                                                                                          ├─────┬──────┤
+│                                                                                          │ Male│Female│
+│                                                                                          ├─────┼──────┤
+│                                                                                          │Count│ Count│
+├──────────────────────────────────────────────────────────────────────────────────────────┼─────┼──────┤
+│ 1. How often do you usually drive a car or other motor vehicle? Every day                │ 2305│  2362│
+│                                                                 Several days a week      │  440│   834│
+│                                                                 Once a week or less      │  125│   236│
+│                                                                 Only certain times a year│   58│    72│
+│                                                                 Never                    │  192│   348│
+│                                                                 Drivers                  │ 2928│  3504│
+│                                                                 Valid Values             │ 3120│  3852│
+│                                                                 Don't know               │    3│     5│
+│                                                                 Refused                  │    9│    10│
+│                                                                 Missing Values           │   12│    15│
+│                                                                 Missing Values 2         │   12│    15│
+╰──────────────────────────────────────────────────────────────────────────────────────────┴─────┴──────╯
+])
+AT_CLEANUP
+
+AT_SETUP([CTABLES PCOMPUTE - THRU])
+AT_KEYWORDS([postcompute])
+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([1 THRU 2])
+    /PCOMPUTE &y=EXPR([3 THRU 4])
+    /PCOMPUTE &z=EXPR([5] + MISSING)
+    /PPROPERTIES &x LABEL='Frequent Drivers'
+    /PPROPERTIES &y LABEL='Infrequent Drivers'
+    /PPROPERTIES &z LABEL='Not Drivers or Missing'
+    /TABLE=qn1 BY qns3a
+    /CATEGORIES VARIABLES=qn1 [1 THRU 2, &x, 3 THRU 4, &y, SUBTOTAL='Drivers', 5, MISSING, &z]
+]])
+AT_CHECK([pspp ctables.sps -O box=unicode -O width=140], [0], [dnl
+                                              Custom Tables
+╭──────────────────────────────────────────────────────────────────────────────────────────┬────────────╮
+│                                                                                          │S3a. GENDER:│
+│                                                                                          ├─────┬──────┤
+│                                                                                          │ Male│Female│
+│                                                                                          ├─────┼──────┤
+│                                                                                          │Count│ Count│
+├──────────────────────────────────────────────────────────────────────────────────────────┼─────┼──────┤
+│ 1. How often do you usually drive a car or other motor vehicle? Every day                │ 2305│  2362│
+│                                                                 Several days a week      │  440│   834│
+│                                                                 Frequent Drivers         │ 2745│  3196│
+│                                                                 Once a week or less      │  125│   236│
+│                                                                 Only certain times a year│   58│    72│
+│                                                                 Infrequent Drivers       │  183│   308│
+│                                                                 Drivers                  │ 2928│  3504│
+│                                                                 Never                    │  192│   348│
+│                                                                 Don't know               │    3│     5│
+│                                                                 Refused                  │    9│    10│
+│                                                                 Not Drivers or Missing   │  204│   363│
+╰──────────────────────────────────────────────────────────────────────────────────────────┴─────┴──────╯
+])
+AT_CLEANUP
+
+dnl I'm not sure that this is the correct behavior (see
+dnl https://mail.gnu.org/archive/html/pspp-users/2022-07/msg00002.html)
+dnl but at least this test will notify us if the behavior changes.
+AT_SETUP([CTABLES intersecting PCOMPUTEs])
+AT_KEYWORDS([PCOMPUTE postcompute])
+AT_DATA([ctables.sps],
+[[DATA LIST LIST NOTABLE/x y z.
+WEIGHT by z.
+FORMATS ALL (F1.0).
+VARIABLE LEVEL x y (NOMINAL).
+BEGIN DATA.
+1 4 5
+1 5 2
+1 6 9
+2 4 2
+2 5 3
+2 6 4
+3 4 1
+3 5 6
+3 6 1
+END DATA.
+
+CTABLES
+    /PCOMPUTE &a = EXPR([1] + [2])
+    /PCOMPUTE &b = EXPR([2] + [3])
+    /PCOMPUTE &c = EXPR([4] * [5])
+    /PCOMPUTE &d = EXPR([5] * [6])
+    /TABLE x BY y
+    /CATEGORIES VARIABLES=x [1, &a, 2, &b, 3]
+    /CATEGORIES VARIABLES=y [4, &c, 5, &d, 6].
+]])
+AT_CHECK([pspp ctables.sps -O box=unicode], [0],
+[[                   Custom Tables
+╭───────────┬─────────────────────────────────────╮
+│           │                  y                  │
+│           ├─────┬─────────┬─────┬─────────┬─────┤
+│           │  4  │[4] * [5]│  5  │[5] * [6]│  6  │
+│           ├─────┼─────────┼─────┼─────────┼─────┤
+│           │Count│  Count  │Count│  Count  │Count│
+├───────────┼─────┼─────────┼─────┼─────────┼─────┤
+│x 1        │    5│       10│    2│       18│    9│
+│  [1] + [2]│    7│        .│    5│        .│   13│
+│  2        │    2│        6│    3│       12│    4│
+│  [2] + [3]│    3│        .│    9│        .│    5│
+│  3        │    1│        6│    6│        6│    1│
+╰───────────┴─────┴─────────┴─────┴─────────┴─────╯
+]])
+AT_CLEANUP
+
+AT_SETUP([CTABLES string and date and time])
+
+weight=1
+for gender in F M; do
+    for month in Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec; do
+        for wkday in Sun Mon Tue Wed Thu Fri Sat Sun; do
+           printf "$weight $gender $month $wkday\n"
+           weight=$(expr \( $weight + 3 \) % 7 + 2)
+       done
+    done
+done > ctables.txt
+
+AT_DATA([ctables.sps],
+[[DATA LIST LIST NOTABLE FILE='ctables.txt'
+    /w (F5.0) gender (A1) fmon (MONTH3) fday (WKDAY3).
+WEIGHT by w.
+VARIABLE LEVEL w (SCALE).
+VARIABLE LEVEL gender fmon fday (NOMINAL).
+VARIABLE LABEL
+  gender 'Gender'
+  fmon 'Favorite month'
+  fday 'Favorite day of the week'.
+VALUE LABELS /gender 'M' 'Male' 'F' 'Female'.
+CTABLES
+    /PCOMPUTE &q2 = EXPR(['APR' THRU 'June'])
+    /PPROPERTIES &q2 LABEL='Q2'
+    /PCOMPUTE &weekend = EXPR(['sun'] + ['Sat'])
+    /PPROPERTIES &weekend LABEL='Weekend'
+    /TABLE fmon BY gender > fday
+    /CATEGORIES VARIABLES=fmon ['JAN', 'FEB', 'Mar', SUBTOTAL="Q1",
+                                4 THRU 6, &q2,
+                               'JUL' THRU 'sep', SUBTOTAL="Q3",
+                               OTHERNM, SUBTOTAL='Q4']
+    /CATEGORIES VARIABLES=gender ['M', 'F']
+    /CATEGORIES VARIABLE=fday ['Sun', 2 THRU 6, 'Sat', &weekend] TOTAL=YES
+    /SLABELS VISIBLE=NO.
 ]])
 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.00│    30│        92│
-│had too much to drink to drive safely will   certain    │       │       │          │       │        │      │          │
-│A. Get stopped by the police?                Very likely│    384│    552│       936│     14│  171.00│    65│       185│
-│                                             Somewhat   │    590│   1249│      1839│     20│  265.00│    92│       285│
-│                                             likely     │       │       │          │       │        │      │          │
-│                                             Somewhat   │    278│    647│       925│      6│  116.00│    38│       122│
-│                                             unlikely   │       │       │          │       │        │      │          │
-│                                             Very       │    141│    290│       431│      4│   59.00│    22│        63│
-│                                             unlikely   │       │       │          │       │        │      │          │
-╰────────────────────────────────────────────────────────┴───────┴───────┴──────────┴───────┴────────┴──────┴──────────╯
+                                              Custom Tables
+╭──────────────────┬───────────────────────────────────────────────────────────────────────────────────╮
+│                  │                                       Gender                                      │
+│                  ├─────────────────────────────────────────┬─────────────────────────────────────────┤
+│                  │                   Male                  │                  Female                 │
+│                  ├─────────────────────────────────────────┼─────────────────────────────────────────┤
+│                  │         Favorite day of the week        │         Favorite day of the week        │
+│                  ├───┬───┬───┬───┬───┬───┬───┬───────┬─────┼───┬───┬───┬───┬───┬───┬───┬───────┬─────┤
+│                  │SUN│MON│TUE│WED│THU│FRI│SAT│Weekend│Total│SUN│MON│TUE│WED│THU│FRI│SAT│Weekend│Total│
+├──────────────────┼───┼───┼───┼───┼───┼───┼───┼───────┼─────┼───┼───┼───┼───┼───┼───┼───┼───────┼─────┤
+│Favorite month JAN│ 10│  3│  8│  6│  4│  2│  7│     17│   40│  9│  6│  4│  2│  7│  5│  3│     12│   36│
+│               FEB│  6│  8│  6│  4│  2│  7│  5│     11│   38│ 12│  4│  2│  7│  5│  3│  8│     20│   41│
+│               MAR│ 16│  6│  4│  2│  7│  5│  3│     19│   43│  8│  2│  7│  5│  3│  8│  6│     14│   39│
+│               Q1 │ 32│ 17│ 18│ 12│ 13│ 14│ 15│       │     │ 29│ 12│ 13│ 14│ 15│ 16│ 17│       │     │
+│               APR│ 12│  4│  2│  7│  5│  3│  8│     20│   41│  4│  7│  5│  3│  8│  6│  4│      8│   37│
+│               MAY│  8│  2│  7│  5│  3│  8│  6│     14│   39│ 14│  5│  3│  8│  6│  4│  2│     16│   42│
+│               JUN│  4│  7│  5│  3│  8│  6│  4│      8│   37│ 10│  3│  8│  6│  4│  2│  7│     17│   40│
+│               Q2 │ 24│ 13│ 14│ 15│ 16│ 17│ 18│      .│     │ 28│ 15│ 16│ 17│ 18│ 12│ 13│      .│     │
+│               JUL│ 14│  5│  3│  8│  6│  4│  2│     16│   42│  6│  8│  6│  4│  2│  7│  5│     11│   38│
+│               AUG│ 10│  3│  8│  6│  4│  2│  7│     17│   40│ 16│  6│  4│  2│  7│  5│  3│     19│   43│
+│               SEP│  6│  8│  6│  4│  2│  7│  5│     11│   38│ 12│  4│  2│  7│  5│  3│  8│     20│   41│
+│               Q3 │ 54│ 29│ 31│ 33│ 28│ 30│ 32│       │     │ 62│ 33│ 28│ 30│ 32│ 27│ 29│       │     │
+│               OCT│ 16│  6│  4│  2│  7│  5│  3│     19│   43│  8│  2│  7│  5│  3│  8│  6│     14│   39│
+│               NOV│ 12│  4│  2│  7│  5│  3│  8│     20│   41│  4│  7│  5│  3│  8│  6│  4│      8│   37│
+│               DEC│  8│  2│  7│  5│  3│  8│  6│     14│   39│ 14│  5│  3│  8│  6│  4│  2│     16│   42│
+│               Q4 │ 36│ 12│ 13│ 14│ 15│ 16│ 17│       │     │ 26│ 14│ 15│ 16│ 17│ 18│ 12│       │     │
+╰──────────────────┴───┴───┴───┴───┴───┴───┴───┴───────┴─────┴───┴───┴───┴───┴───┴───┴───┴───────┴─────╯
 ])
 AT_CLEANUP
 
@@ -1653,7 +1870,6 @@ CTABLES /TABLE AgeGroup BY qns3a /CLABELS COLLABELS=OPPOSITE.
 CTABLES /TABLE AgeGroup BY qns3a /CLABELS ROWLABELS=LAYER.
 CTABLES /TABLE AgeGroup BY qns3a /CLABELS COLLABELS=LAYER.
 ]])
-pwd
 AT_CHECK([pspp ctables.sps --table-look="$builddir"/all-layers.stt -O box=unicode -O width=120], [0], [dnl
              Custom Tables
 ╭───────────────────────┬────────────╮
@@ -2149,7 +2365,7 @@ AT_CHECK([pspp ctables.sps -O box=unicode -O width=120], [0], [dnl
 ])
 AT_CLEANUP
 
-AT_SETUP([CTABLES VLABELS])
+AT_SETUP([CTABLES VLABELS - variables on different axes])
 AT_CHECK([ln $top_srcdir/examples/nhtsa.sav . || cp $top_srcdir/examples/nhtsa.sav .])
 AT_DATA([ctables.sps],
 [[GET 'nhtsa.sav'.
@@ -2254,6 +2470,273 @@ AT_CHECK([pspp ctables.sps -O box=unicode], [0], [dnl
 ])
 AT_CLEANUP
 
+AT_SETUP([CTABLES VLABELS - stacked variables])
+AT_KEYWORDS([stack stacking])
+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 DISPLAY=NAME /TABLE qnd5a + qns3a.
+CTABLES /VLABELS VARIABLES=qnd5a DISPLAY=NAME /TABLE qnd5a + qns3a.
+CTABLES /VLABELS VARIABLES=qns3a DISPLAY=NONE /TABLE qnd5a + qns3a.
+CTABLES /VLABELS VARIABLES=qnd5a DISPLAY=NONE /TABLE qnd5a + qns3a.
+CTABLES /VLABELS VARIABLES=qns3a qnd5a DISPLAY=NONE /TABLE qnd5a + qns3a.
+]])
+AT_CHECK([pspp ctables.sps -O box=unicode], [0], [dnl
+                                 Custom Tables
+╭───────────────────────────────────────────────────────────────────────┬─────╮
+│                                                                       │Count│
+├───────────────────────────────────────────────────────────────────────┼─────┤
+│D5a. What would you say is your primary ethnic  Cuban                  │   20│
+│background?                                     Mexican                │  311│
+│                                                Spanish                │   48│
+│                                                South American         │   34│
+│                                                Central American       │   52│
+│                                                Puerto Rican, OR       │   78│
+│                                                Something else         │   68│
+│                                                Multiple - cannot      │    7│
+│                                                choose one             │     │
+├───────────────────────────────────────────────────────────────────────┼─────┤
+│QNS3A                                           Male                   │ 3132│
+│                                                Female                 │ 3867│
+╰───────────────────────────────────────────────────────────────────────┴─────╯
+
+                  Custom Tables
+╭─────────────────────────────────────────┬─────╮
+│                                         │Count│
+├─────────────────────────────────────────┼─────┤
+│QND5A        Cuban                       │   20│
+│             Mexican                     │  311│
+│             Spanish                     │   48│
+│             South American              │   34│
+│             Central American            │   52│
+│             Puerto Rican, OR            │   78│
+│             Something else              │   68│
+│             Multiple - cannot choose one│    7│
+├─────────────────────────────────────────┼─────┤
+│S3a. GENDER: Male                        │ 3132│
+│             Female                      │ 3867│
+╰─────────────────────────────────────────┴─────╯
+
+                                 Custom Tables
+╭───────────────────────────────────────────────────────────────────────┬─────╮
+│                                                                       │Count│
+├───────────────────────────────────────────────────────────────────────┼─────┤
+│D5a. What would you say is your primary ethnic  Cuban                  │   20│
+│background?                                     Mexican                │  311│
+│                                                Spanish                │   48│
+│                                                South American         │   34│
+│                                                Central American       │   52│
+│                                                Puerto Rican, OR       │   78│
+│                                                Something else         │   68│
+│                                                Multiple - cannot      │    7│
+│                                                choose one             │     │
+├───────────────────────────────────────────────────────────────────────┼─────┤
+│Male                                                                   │ 3132│
+├───────────────────────────────────────────────────────────────────────┼─────┤
+│Female                                                                 │ 3867│
+╰───────────────────────────────────────────────────────────────────────┴─────╯
+
+            Custom Tables
+╭─────────────────────────────┬─────╮
+│                             │Count│
+├─────────────────────────────┼─────┤
+│Cuban                        │   20│
+├─────────────────────────────┼─────┤
+│Mexican                      │  311│
+├─────────────────────────────┼─────┤
+│Spanish                      │   48│
+├─────────────────────────────┼─────┤
+│South American               │   34│
+├─────────────────────────────┼─────┤
+│Central American             │   52│
+├─────────────────────────────┼─────┤
+│Puerto Rican, OR             │   78│
+├─────────────────────────────┼─────┤
+│Something else               │   68│
+├─────────────────────────────┼─────┤
+│Multiple - cannot choose one │    7│
+├─────────────────────────────┼─────┤
+│S3a. GENDER:     Male        │ 3132│
+│                 Female      │ 3867│
+╰─────────────────────────────┴─────╯
+
+            Custom Tables
+╭────────────────────────────┬─────╮
+│                            │Count│
+├────────────────────────────┼─────┤
+│Cuban                       │   20│
+│Mexican                     │  311│
+│Spanish                     │   48│
+│South American              │   34│
+│Central American            │   52│
+│Puerto Rican, OR            │   78│
+│Something else              │   68│
+│Multiple - cannot choose one│    7│
+│Male                        │ 3132│
+│Female                      │ 3867│
+╰────────────────────────────┴─────╯
+])
+AT_CLEANUP
+
+AT_SETUP([CTABLES VLABELS - nested variables])
+AT_KEYWORDS([nest nesting])
+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 DISPLAY=NAME /TABLE qnd5a > qns3a.
+CTABLES /VLABELS VARIABLES=qnd5a DISPLAY=NAME /TABLE qnd5a > qns3a.
+CTABLES /VLABELS VARIABLES=qns3a DISPLAY=NONE /TABLE qnd5a > qns3a.
+CTABLES /VLABELS VARIABLES=qnd5a DISPLAY=NONE /TABLE qnd5a > qns3a.
+CTABLES /VLABELS VARIABLES=qns3a qnd5a DISPLAY=NONE /TABLE qnd5a > qns3a.
+]])
+AT_CHECK([pspp ctables.sps -O box=unicode], [0], [dnl
+                                 Custom Tables
+╭───────────────────────────────────────────────────────────────────────┬─────╮
+│                                                                       │Count│
+├───────────────────────────────────────────────────────────────────────┼─────┤
+│D5a. What would you say is your       Cuban                QNS3A Male  │   13│
+│primary ethnic background?                                       Female│    7│
+│                                     ╶─────────────────────────────────┼─────┤
+│                                      Mexican              QNS3A Male  │  175│
+│                                                                 Female│  136│
+│                                     ╶─────────────────────────────────┼─────┤
+│                                      Spanish              QNS3A Male  │   20│
+│                                                                 Female│   28│
+│                                     ╶─────────────────────────────────┼─────┤
+│                                      South American       QNS3A Male  │   21│
+│                                                                 Female│   13│
+│                                     ╶─────────────────────────────────┼─────┤
+│                                      Central American     QNS3A Male  │   27│
+│                                                                 Female│   25│
+│                                     ╶─────────────────────────────────┼─────┤
+│                                      Puerto Rican, OR     QNS3A Male  │   37│
+│                                                                 Female│   41│
+│                                     ╶─────────────────────────────────┼─────┤
+│                                      Something else       QNS3A Male  │   35│
+│                                                                 Female│   33│
+│                                     ╶─────────────────────────────────┼─────┤
+│                                      Multiple - cannot    QNS3A Male  │    2│
+│                                      choose one                 Female│    5│
+╰───────────────────────────────────────────────────────────────────────┴─────╯
+
+                         Custom Tables
+╭──────────────────────────────────────────────────────┬─────╮
+│                                                      │Count│
+├──────────────────────────────────────────────────────┼─────┤
+│QND5A Cuban                        S3a. GENDER: Male  │   13│
+│                                                Female│    7│
+│     ╶────────────────────────────────────────────────┼─────┤
+│      Mexican                      S3a. GENDER: Male  │  175│
+│                                                Female│  136│
+│     ╶────────────────────────────────────────────────┼─────┤
+│      Spanish                      S3a. GENDER: Male  │   20│
+│                                                Female│   28│
+│     ╶────────────────────────────────────────────────┼─────┤
+│      South American               S3a. GENDER: Male  │   21│
+│                                                Female│   13│
+│     ╶────────────────────────────────────────────────┼─────┤
+│      Central American             S3a. GENDER: Male  │   27│
+│                                                Female│   25│
+│     ╶────────────────────────────────────────────────┼─────┤
+│      Puerto Rican, OR             S3a. GENDER: Male  │   37│
+│                                                Female│   41│
+│     ╶────────────────────────────────────────────────┼─────┤
+│      Something else               S3a. GENDER: Male  │   35│
+│                                                Female│   33│
+│     ╶────────────────────────────────────────────────┼─────┤
+│      Multiple - cannot choose one S3a. GENDER: Male  │    2│
+│                                                Female│    5│
+╰──────────────────────────────────────────────────────┴─────╯
+
+                                 Custom Tables
+╭───────────────────────────────────────────────────────────────────────┬─────╮
+│                                                                       │Count│
+├───────────────────────────────────────────────────────────────────────┼─────┤
+│D5a. What would you say is your primary    Cuban                 Male  │   13│
+│ethnic background?                                               Female│    7│
+│                                          ╶────────────────────────────┼─────┤
+│                                           Mexican               Male  │  175│
+│                                                                 Female│  136│
+│                                          ╶────────────────────────────┼─────┤
+│                                           Spanish               Male  │   20│
+│                                                                 Female│   28│
+│                                          ╶────────────────────────────┼─────┤
+│                                           South American        Male  │   21│
+│                                                                 Female│   13│
+│                                          ╶────────────────────────────┼─────┤
+│                                           Central American      Male  │   27│
+│                                                                 Female│   25│
+│                                          ╶────────────────────────────┼─────┤
+│                                           Puerto Rican, OR      Male  │   37│
+│                                                                 Female│   41│
+│                                          ╶────────────────────────────┼─────┤
+│                                           Something else        Male  │   35│
+│                                                                 Female│   33│
+│                                          ╶────────────────────────────┼─────┤
+│                                           Multiple - cannot     Male  │    2│
+│                                           choose one            Female│    5│
+╰───────────────────────────────────────────────────────────────────────┴─────╯
+
+                      Custom Tables
+╭────────────────────────────────────────────────┬─────╮
+│                                                │Count│
+├────────────────────────────────────────────────┼─────┤
+│Cuban                        S3a. GENDER: Male  │   13│
+│                                          Female│    7│
+├────────────────────────────────────────────────┼─────┤
+│Mexican                      S3a. GENDER: Male  │  175│
+│                                          Female│  136│
+├────────────────────────────────────────────────┼─────┤
+│Spanish                      S3a. GENDER: Male  │   20│
+│                                          Female│   28│
+├────────────────────────────────────────────────┼─────┤
+│South American               S3a. GENDER: Male  │   21│
+│                                          Female│   13│
+├────────────────────────────────────────────────┼─────┤
+│Central American             S3a. GENDER: Male  │   27│
+│                                          Female│   25│
+├────────────────────────────────────────────────┼─────┤
+│Puerto Rican, OR             S3a. GENDER: Male  │   37│
+│                                          Female│   41│
+├────────────────────────────────────────────────┼─────┤
+│Something else               S3a. GENDER: Male  │   35│
+│                                          Female│   33│
+├────────────────────────────────────────────────┼─────┤
+│Multiple - cannot choose one S3a. GENDER: Male  │    2│
+│                                          Female│    5│
+╰────────────────────────────────────────────────┴─────╯
+
+               Custom Tables
+╭───────────────────────────────────┬─────╮
+│                                   │Count│
+├───────────────────────────────────┼─────┤
+│Cuban                        Male  │   13│
+│                             Female│    7│
+├───────────────────────────────────┼─────┤
+│Mexican                      Male  │  175│
+│                             Female│  136│
+├───────────────────────────────────┼─────┤
+│Spanish                      Male  │   20│
+│                             Female│   28│
+├───────────────────────────────────┼─────┤
+│South American               Male  │   21│
+│                             Female│   13│
+├───────────────────────────────────┼─────┤
+│Central American             Male  │   27│
+│                             Female│   25│
+├───────────────────────────────────┼─────┤
+│Puerto Rican, OR             Male  │   37│
+│                             Female│   41│
+├───────────────────────────────────┼─────┤
+│Something else               Male  │   35│
+│                             Female│   33│
+├───────────────────────────────────┼─────┤
+│Multiple - cannot choose one Male  │    2│
+│                             Female│    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],
@@ -2541,11 +3024,11 @@ 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]
+    /TABLE qn61 > qn57 BY qnd7a > qn86 + qn64b BY qns3a[TABLEID, LAYERID, SUBTABLEID]
     /SLABELS POSITION=ROW
-    /TABLE qn61 > qn57 BY qnd7a > qn86 + qn64b BY qns3a[ROW.ID, LAYERROW.ID]
+    /TABLE qn61 > qn57 BY qnd7a > qn86 + qn64b BY qns3a[ROWID, LAYERROWID]
     /SLABELS POSITION=ROW
-    /TABLE qn61 > qn57 BY qnd7a > qn86 + qn64b BY qns3a[COL.ID, LAYERCOL.ID]
+    /TABLE qn61 > qn57 BY qnd7a > qn86 + qn64b BY qns3a[COLID, LAYERCOLID]
     /SLABELS POSITION=ROW.
 ]])
 AT_CHECK([pspp ctables.sps --table-look="$builddir"/all-layers.stt -O box=unicode -O width=80], [0], [dnl
@@ -2703,6 +3186,1542 @@ Female
 ])
 AT_CLEANUP
 
+AT_SETUP([CTABLES area definitions with CLABELS ROWLABELS=OPPOSITE])
+AT_KEYWORDS([ROWLABELS OPPOSITE])
+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 qn26 > qn61 > qn57 BY qn27 > qnd7a > qn86 BY qns3a[TABLEID, LAYERID, SUBTABLEID]
+    /SLABELS POSITION=ROW
+    /CLABELS ROWLABELS=OPPOSITE
+    /TABLE qn26 > qn61 > qn57 BY qn27 > qnd7a > qn86 BY qns3a[ROWID, LAYERROWID]
+    /SLABELS POSITION=ROW
+    /CLABELS ROWLABELS=OPPOSITE
+    /TABLE qn26 > qn61 > qn57 BY qn27 > qnd7a > qn86 BY qns3a[COLID, LAYERCOLID]
+    /SLABELS POSITION=ROW
+    /CLABELS ROWLABELS=OPPOSITE.
+]])
+AT_CHECK([pspp ctables.sps --table-look="$builddir"/all-layers.stt -O box=unicode -O width=120], [0], [dnl
+                                        Custom Tables
+Male
+╭──────────────────────────────────┬───────────────────────────────────────────────────────╮
+│                                  │                          QN27                         │
+│                                  ├───────────────────────────┬───────────────────────────┤
+│                                  │            Yes            │             No            │
+│                                  ├───────────────────────────┼───────────────────────────┤
+│                                  │           QND7A           │           QND7A           │
+│                                  ├─────────────┬─────────────┼─────────────┬─────────────┤
+│                                  │     Yes     │      No     │     Yes     │      No     │
+│                                  ├─────────────┼─────────────┼─────────────┼─────────────┤
+│                                  │     QN86    │     QN86    │     QN86    │     QN86    │
+│                                  ├──────┬──────┼──────┬──────┼──────┬──────┼──────┬──────┤
+│                                  │  Yes │  No  │  Yes │  No  │  Yes │  No  │  Yes │  No  │
+│                                  ├───┬──┼───┬──┼───┬──┼───┬──┼───┬──┼───┬──┼───┬──┼───┬──┤
+│                                  │Yes│No│Yes│No│Yes│No│Yes│No│Yes│No│Yes│No│Yes│No│Yes│No│
+├──────────────────────────────────┼───┼──┼───┼──┼───┼──┼───┼──┼───┼──┼───┼──┼───┼──┼───┼──┤
+│QN26 Yes QN61 Yes QN57 Table ID   │  1│ 1│  1│ 1│  1│ 1│  1│ 1│  1│ 1│  1│ 1│  1│ 1│  1│ 1│
+│                       Layer ID   │  1│ 1│  1│ 1│  1│ 1│  1│ 1│  1│ 1│  1│ 1│  1│ 1│  1│ 1│
+│                       Subtable ID│  1│ 1│  2│ 2│  3│ 3│  4│ 4│  5│ 5│  6│ 6│  7│ 7│  8│ 8│
+│             ╶────────────────────┼───┼──┼───┼──┼───┼──┼───┼──┼───┼──┼───┼──┼───┼──┼───┼──┤
+│              No  QN57 Table ID   │  1│ 1│  1│ 1│  1│ 1│  1│ 1│  1│ 1│  1│ 1│  1│ 1│  1│ 1│
+│                       Layer ID   │  1│ 1│  1│ 1│  1│ 1│  1│ 1│  1│ 1│  1│ 1│  1│ 1│  1│ 1│
+│                       Subtable ID│  1│ 1│  2│ 2│  3│ 3│  4│ 4│  5│ 5│  6│ 6│  7│ 7│  8│ 8│
+│    ╶─────────────────────────────┼───┼──┼───┼──┼───┼──┼───┼──┼───┼──┼───┼──┼───┼──┼───┼──┤
+│     No  QN61 Yes QN57 Table ID   │  1│ 1│  1│ 1│  1│ 1│  1│ 1│  1│ 1│  1│ 1│  1│ 1│  1│ 1│
+│                       Layer ID   │  1│ 1│  1│ 1│  1│ 1│  1│ 1│  1│ 1│  1│ 1│  1│ 1│  1│ 1│
+│                       Subtable ID│  9│ 9│ 10│10│ 11│11│ 12│12│ 13│13│ 14│14│ 15│15│ 16│16│
+│             ╶────────────────────┼───┼──┼───┼──┼───┼──┼───┼──┼───┼──┼───┼──┼───┼──┼───┼──┤
+│              No  QN57 Table ID   │  1│ 1│  1│ 1│  1│ 1│  1│ 1│  1│ 1│  1│ 1│  1│ 1│  1│ 1│
+│                       Layer ID   │  1│ 1│  1│ 1│  1│ 1│  1│ 1│  1│ 1│  1│ 1│  1│ 1│  1│ 1│
+│                       Subtable ID│  9│ 9│ 10│10│ 11│11│ 12│12│ 13│13│ 14│14│ 15│15│ 16│16│
+╰──────────────────────────────────┴───┴──┴───┴──┴───┴──┴───┴──┴───┴──┴───┴──┴───┴──┴───┴──╯
+
+                                        Custom Tables
+Female
+╭──────────────────────────────────┬───────────────────────────────────────────────────────╮
+│                                  │                          QN27                         │
+│                                  ├───────────────────────────┬───────────────────────────┤
+│                                  │            Yes            │             No            │
+│                                  ├───────────────────────────┼───────────────────────────┤
+│                                  │           QND7A           │           QND7A           │
+│                                  ├─────────────┬─────────────┼─────────────┬─────────────┤
+│                                  │     Yes     │      No     │     Yes     │      No     │
+│                                  ├─────────────┼─────────────┼─────────────┼─────────────┤
+│                                  │     QN86    │     QN86    │     QN86    │     QN86    │
+│                                  ├──────┬──────┼──────┬──────┼──────┬──────┼──────┬──────┤
+│                                  │  Yes │  No  │  Yes │  No  │  Yes │  No  │  Yes │  No  │
+│                                  ├───┬──┼───┬──┼───┬──┼───┬──┼───┬──┼───┬──┼───┬──┼───┬──┤
+│                                  │Yes│No│Yes│No│Yes│No│Yes│No│Yes│No│Yes│No│Yes│No│Yes│No│
+├──────────────────────────────────┼───┼──┼───┼──┼───┼──┼───┼──┼───┼──┼───┼──┼───┼──┼───┼──┤
+│QN26 Yes QN61 Yes QN57 Table ID   │  1│ 1│  1│ 1│  1│ 1│  1│ 1│  1│ 1│  1│ 1│  1│ 1│  1│ 1│
+│                       Layer ID   │  2│ 2│  2│ 2│  2│ 2│  2│ 2│  2│ 2│  2│ 2│  2│ 2│  2│ 2│
+│                       Subtable ID│ 17│17│ 18│18│ 19│19│ 20│20│ 21│21│ 22│22│ 23│23│ 24│24│
+│             ╶────────────────────┼───┼──┼───┼──┼───┼──┼───┼──┼───┼──┼───┼──┼───┼──┼───┼──┤
+│              No  QN57 Table ID   │  1│ 1│  1│ 1│  1│ 1│  1│ 1│  1│ 1│  1│ 1│  1│ 1│  1│ 1│
+│                       Layer ID   │  2│ 2│  2│ 2│  2│ 2│  2│ 2│  2│ 2│  2│ 2│  2│ 2│  2│ 2│
+│                       Subtable ID│ 17│17│ 18│18│ 19│19│ 20│20│ 21│21│ 22│22│ 23│23│ 24│24│
+│    ╶─────────────────────────────┼───┼──┼───┼──┼───┼──┼───┼──┼───┼──┼───┼──┼───┼──┼───┼──┤
+│     No  QN61 Yes QN57 Table ID   │  1│ 1│  1│ 1│  1│ 1│  1│ 1│  1│ 1│  1│ 1│  1│ 1│  1│ 1│
+│                       Layer ID   │  2│ 2│  2│ 2│  2│ 2│  2│ 2│  2│ 2│  2│ 2│  2│ 2│  2│ 2│
+│                       Subtable ID│ 25│25│ 26│26│ 27│27│ 28│28│ 29│29│ 30│30│ 31│31│ 32│32│
+│             ╶────────────────────┼───┼──┼───┼──┼───┼──┼───┼──┼───┼──┼───┼──┼───┼──┼───┼──┤
+│              No  QN57 Table ID   │  1│ 1│  1│ 1│  1│ 1│  1│ 1│  1│ 1│  1│ 1│  1│ 1│  1│ 1│
+│                       Layer ID   │  2│ 2│  2│ 2│  2│ 2│  2│ 2│  2│ 2│  2│ 2│  2│ 2│  2│ 2│
+│                       Subtable ID│ 25│25│ 26│26│ 27│27│ 28│28│ 29│29│ 30│30│ 31│31│ 32│32│
+╰──────────────────────────────────┴───┴──┴───┴──┴───┴──┴───┴──┴───┴──┴───┴──┴───┴──┴───┴──╯
+
+                                        Custom Tables
+Male
+╭───────────────────────────────────┬───────────────────────────────────────────────────────╮
+│                                   │                          QN27                         │
+│                                   ├───────────────────────────┬───────────────────────────┤
+│                                   │            Yes            │             No            │
+│                                   ├───────────────────────────┼───────────────────────────┤
+│                                   │           QND7A           │           QND7A           │
+│                                   ├─────────────┬─────────────┼─────────────┬─────────────┤
+│                                   │     Yes     │      No     │     Yes     │      No     │
+│                                   ├─────────────┼─────────────┼─────────────┼─────────────┤
+│                                   │     QN86    │     QN86    │     QN86    │     QN86    │
+│                                   ├──────┬──────┼──────┬──────┼──────┬──────┼──────┬──────┤
+│                                   │  Yes │  No  │  Yes │  No  │  Yes │  No  │  Yes │  No  │
+│                                   ├───┬──┼───┬──┼───┬──┼───┬──┼───┬──┼───┬──┼───┬──┼───┬──┤
+│                                   │Yes│No│Yes│No│Yes│No│Yes│No│Yes│No│Yes│No│Yes│No│Yes│No│
+├───────────────────────────────────┼───┼──┼───┼──┼───┼──┼───┼──┼───┼──┼───┼──┼───┼──┼───┼──┤
+│QN26 Yes QN61 Yes QN57 Row ID      │  1│ 1│  2│ 2│  3│ 3│  4│ 4│  5│ 5│  6│ 6│  7│ 7│  8│ 8│
+│                       Layer Row ID│  1│ 1│  1│ 1│  1│ 1│  1│ 1│  1│ 1│  1│ 1│  1│ 1│  1│ 1│
+│             ╶─────────────────────┼───┼──┼───┼──┼───┼──┼───┼──┼───┼──┼───┼──┼───┼──┼───┼──┤
+│              No  QN57 Row ID      │  9│ 9│ 10│10│ 11│11│ 12│12│ 13│13│ 14│14│ 15│15│ 16│16│
+│                       Layer Row ID│  2│ 2│  2│ 2│  2│ 2│  2│ 2│  2│ 2│  2│ 2│  2│ 2│  2│ 2│
+│    ╶──────────────────────────────┼───┼──┼───┼──┼───┼──┼───┼──┼───┼──┼───┼──┼───┼──┼───┼──┤
+│     No  QN61 Yes QN57 Row ID      │ 17│17│ 18│18│ 19│19│ 20│20│ 21│21│ 22│22│ 23│23│ 24│24│
+│                       Layer Row ID│  3│ 3│  3│ 3│  3│ 3│  3│ 3│  3│ 3│  3│ 3│  3│ 3│  3│ 3│
+│             ╶─────────────────────┼───┼──┼───┼──┼───┼──┼───┼──┼───┼──┼───┼──┼───┼──┼───┼──┤
+│              No  QN57 Row ID      │ 25│25│ 26│26│ 27│27│ 28│28│ 29│29│ 30│30│ 31│31│ 32│32│
+│                       Layer Row ID│  4│ 4│  4│ 4│  4│ 4│  4│ 4│  4│ 4│  4│ 4│  4│ 4│  4│ 4│
+╰───────────────────────────────────┴───┴──┴───┴──┴───┴──┴───┴──┴───┴──┴───┴──┴───┴──┴───┴──╯
+
+                                        Custom Tables
+Female
+╭───────────────────────────────────┬───────────────────────────────────────────────────────╮
+│                                   │                          QN27                         │
+│                                   ├───────────────────────────┬───────────────────────────┤
+│                                   │            Yes            │             No            │
+│                                   ├───────────────────────────┼───────────────────────────┤
+│                                   │           QND7A           │           QND7A           │
+│                                   ├─────────────┬─────────────┼─────────────┬─────────────┤
+│                                   │     Yes     │      No     │     Yes     │      No     │
+│                                   ├─────────────┼─────────────┼─────────────┼─────────────┤
+│                                   │     QN86    │     QN86    │     QN86    │     QN86    │
+│                                   ├──────┬──────┼──────┬──────┼──────┬──────┼──────┬──────┤
+│                                   │  Yes │  No  │  Yes │  No  │  Yes │  No  │  Yes │  No  │
+│                                   ├───┬──┼───┬──┼───┬──┼───┬──┼───┬──┼───┬──┼───┬──┼───┬──┤
+│                                   │Yes│No│Yes│No│Yes│No│Yes│No│Yes│No│Yes│No│Yes│No│Yes│No│
+├───────────────────────────────────┼───┼──┼───┼──┼───┼──┼───┼──┼───┼──┼───┼──┼───┼──┼───┼──┤
+│QN26 Yes QN61 Yes QN57 Row ID      │ 33│33│ 34│34│ 35│35│ 36│36│ 37│37│ 38│38│ 39│39│ 40│40│
+│                       Layer Row ID│  5│ 5│  5│ 5│  5│ 5│  5│ 5│  5│ 5│  5│ 5│  5│ 5│  5│ 5│
+│             ╶─────────────────────┼───┼──┼───┼──┼───┼──┼───┼──┼───┼──┼───┼──┼───┼──┼───┼──┤
+│              No  QN57 Row ID      │ 41│41│ 42│42│ 43│43│ 44│44│ 45│45│ 46│46│ 47│47│ 48│48│
+│                       Layer Row ID│  6│ 6│  6│ 6│  6│ 6│  6│ 6│  6│ 6│  6│ 6│  6│ 6│  6│ 6│
+│    ╶──────────────────────────────┼───┼──┼───┼──┼───┼──┼───┼──┼───┼──┼───┼──┼───┼──┼───┼──┤
+│     No  QN61 Yes QN57 Row ID      │ 49│49│ 50│50│ 51│51│ 52│52│ 53│53│ 54│54│ 55│55│ 56│56│
+│                       Layer Row ID│  7│ 7│  7│ 7│  7│ 7│  7│ 7│  7│ 7│  7│ 7│  7│ 7│  7│ 7│
+│             ╶─────────────────────┼───┼──┼───┼──┼───┼──┼───┼──┼───┼──┼───┼──┼───┼──┼───┼──┤
+│              No  QN57 Row ID      │ 57│57│ 58│58│ 59│59│ 60│60│ 61│61│ 62│62│ 63│63│ 64│64│
+│                       Layer Row ID│  8│ 8│  8│ 8│  8│ 8│  8│ 8│  8│ 8│  8│ 8│  8│ 8│  8│ 8│
+╰───────────────────────────────────┴───┴──┴───┴──┴───┴──┴───┴──┴───┴──┴───┴──┴───┴──┴───┴──╯
+
+                                          Custom Tables
+Male
+╭──────────────────────────────────────┬───────────────────────────────────────────────────────╮
+│                                      │                          QN27                         │
+│                                      ├───────────────────────────┬───────────────────────────┤
+│                                      │            Yes            │             No            │
+│                                      ├───────────────────────────┼───────────────────────────┤
+│                                      │           QND7A           │           QND7A           │
+│                                      ├─────────────┬─────────────┼─────────────┬─────────────┤
+│                                      │     Yes     │      No     │     Yes     │      No     │
+│                                      ├─────────────┼─────────────┼─────────────┼─────────────┤
+│                                      │     QN86    │     QN86    │     QN86    │     QN86    │
+│                                      ├──────┬──────┼──────┬──────┼──────┬──────┼──────┬──────┤
+│                                      │  Yes │  No  │  Yes │  No  │  Yes │  No  │  Yes │  No  │
+│                                      ├───┬──┼───┬──┼───┬──┼───┬──┼───┬──┼───┬──┼───┬──┼───┬──┤
+│                                      │Yes│No│Yes│No│Yes│No│Yes│No│Yes│No│Yes│No│Yes│No│Yes│No│
+├──────────────────────────────────────┼───┼──┼───┼──┼───┼──┼───┼──┼───┼──┼───┼──┼───┼──┼───┼──┤
+│QN26 Yes QN61 Yes QN57 Column ID      │  1│ 2│  4│ 3│  6│ 5│  8│ 7│  9│10│ 11│12│ 14│13│ 15│16│
+│                       Layer Column ID│  1│ 2│  4│ 3│  6│ 5│  8│ 7│  9│10│ 11│12│ 14│13│ 15│16│
+│             ╶────────────────────────┼───┼──┼───┼──┼───┼──┼───┼──┼───┼──┼───┼──┼───┼──┼───┼──┤
+│              No  QN57 Column ID      │  1│ 2│  4│ 3│  6│ 5│  8│ 7│  9│10│ 11│12│ 14│13│ 15│16│
+│                       Layer Column ID│  1│ 2│  4│ 3│  6│ 5│  8│ 7│  9│10│ 11│12│ 14│13│ 15│16│
+│    ╶─────────────────────────────────┼───┼──┼───┼──┼───┼──┼───┼──┼───┼──┼───┼──┼───┼──┼───┼──┤
+│     No  QN61 Yes QN57 Column ID      │ 18│17│ 19│20│ 22│21│ 23│24│ 25│26│ 27│28│ 29│30│ 32│31│
+│                       Layer Column ID│  1│ 2│  4│ 3│  6│ 5│  8│ 7│  9│10│ 11│12│ 14│13│ 15│16│
+│             ╶────────────────────────┼───┼──┼───┼──┼───┼──┼───┼──┼───┼──┼───┼──┼───┼──┼───┼──┤
+│              No  QN57 Column ID      │ 18│17│ 19│20│ 22│21│ 23│24│ 25│26│ 27│28│ 29│30│ 32│31│
+│                       Layer Column ID│  1│ 2│  4│ 3│  6│ 5│  8│ 7│  9│10│ 11│12│ 14│13│ 15│16│
+╰──────────────────────────────────────┴───┴──┴───┴──┴───┴──┴───┴──┴───┴──┴───┴──┴───┴──┴───┴──╯
+
+                                          Custom Tables
+Female
+╭──────────────────────────────────────┬───────────────────────────────────────────────────────╮
+│                                      │                          QN27                         │
+│                                      ├───────────────────────────┬───────────────────────────┤
+│                                      │            Yes            │             No            │
+│                                      ├───────────────────────────┼───────────────────────────┤
+│                                      │           QND7A           │           QND7A           │
+│                                      ├─────────────┬─────────────┼─────────────┬─────────────┤
+│                                      │     Yes     │      No     │     Yes     │      No     │
+│                                      ├─────────────┼─────────────┼─────────────┼─────────────┤
+│                                      │     QN86    │     QN86    │     QN86    │     QN86    │
+│                                      ├──────┬──────┼──────┬──────┼──────┬──────┼──────┬──────┤
+│                                      │  Yes │  No  │  Yes │  No  │  Yes │  No  │  Yes │  No  │
+│                                      ├───┬──┼───┬──┼───┬──┼───┬──┼───┬──┼───┬──┼───┬──┼───┬──┤
+│                                      │Yes│No│Yes│No│Yes│No│Yes│No│Yes│No│Yes│No│Yes│No│Yes│No│
+├──────────────────────────────────────┼───┼──┼───┼──┼───┼──┼───┼──┼───┼──┼───┼──┼───┼──┼───┼──┤
+│QN26 Yes QN61 Yes QN57 Column ID      │ 33│34│ 36│35│ 37│38│ 39│40│ 42│41│ 44│43│ 45│46│ 47│48│
+│                       Layer Column ID│ 17│18│ 20│19│ 21│22│ 23│24│ 26│25│ 28│27│ 29│30│ 31│32│
+│             ╶────────────────────────┼───┼──┼───┼──┼───┼──┼───┼──┼───┼──┼───┼──┼───┼──┼───┼──┤
+│              No  QN57 Column ID      │ 33│34│ 36│35│ 37│38│ 39│40│ 42│41│ 44│43│ 45│46│ 47│48│
+│                       Layer Column ID│ 17│18│ 20│19│ 21│22│ 23│24│ 26│25│ 28│27│ 29│30│ 31│32│
+│    ╶─────────────────────────────────┼───┼──┼───┼──┼───┼──┼───┼──┼───┼──┼───┼──┼───┼──┼───┼──┤
+│     No  QN61 Yes QN57 Column ID      │ 49│50│ 51│52│ 54│53│ 56│55│ 57│58│ 60│59│ 62│61│ 64│63│
+│                       Layer Column ID│ 17│18│ 20│19│ 21│22│ 23│24│ 26│25│ 28│27│ 29│30│ 31│32│
+│             ╶────────────────────────┼───┼──┼───┼──┼───┼──┼───┼──┼───┼──┼───┼──┼───┼──┼───┼──┤
+│              No  QN57 Column ID      │ 49│50│ 51│52│ 54│53│ 56│55│ 57│58│ 60│59│ 62│61│ 64│63│
+│                       Layer Column ID│ 17│18│ 20│19│ 21│22│ 23│24│ 26│25│ 28│27│ 29│30│ 31│32│
+╰──────────────────────────────────────┴───┴──┴───┴──┴───┴──┴───┴──┴───┴──┴───┴──┴───┴──┴───┴──╯
+])
+AT_CLEANUP
+
+AT_SETUP([CTABLES area definitions with CLABELS COLLABELS=OPPOSITE])
+AT_KEYWORDS([COLLABELS OPPOSITE])
+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 qn26 > qn61 > qn57 BY qn27 > qnd7a > qn86 BY qns3a[TABLEID, LAYERID, SUBTABLEID]
+    /SLABELS POSITION=ROW
+    /CLABELS COLLABELS=OPPOSITE
+    /TABLE qn26 > qn61 > qn57 BY qn27 > qnd7a > qn86 BY qns3a[ROWID, LAYERROWID]
+    /SLABELS POSITION=ROW
+    /CLABELS COLLABELS=OPPOSITE
+    /TABLE qn26 > qn61 > qn57 BY qn27 > qnd7a > qn86 BY qns3a[COLID, LAYERCOLID]
+    /SLABELS POSITION=ROW
+    /CLABELS COLLABELS=OPPOSITE.
+]])
+AT_CHECK([pspp ctables.sps --table-look="$builddir"/all-layers.stt -O box=unicode -O width=120], [0], [dnl
+                          Custom Tables
+Male
+╭──────────────────────────────────────────┬───────────────────╮
+│                                          │        QN27       │
+│                                          ├─────────┬─────────┤
+│                                          │   Yes   │    No   │
+│                                          ├─────────┼─────────┤
+│                                          │  QND7A  │  QND7A  │
+│                                          ├────┬────┼────┬────┤
+│                                          │ Yes│ No │ Yes│ No │
+│                                          ├────┼────┼────┼────┤
+│                                          │QN86│QN86│QN86│QN86│
+├──────────────────────────────────────────┼────┼────┼────┼────┤
+│QN26 Yes QN61 Yes QN57 Yes Yes Table ID   │   1│   1│   1│   1│
+│                               Layer ID   │   1│   1│   1│   1│
+│                               Subtable ID│   1│   1│   2│   2│
+│                          ╶───────────────┼────┼────┼────┼────┤
+│                           No  Table ID   │   1│   1│   1│   1│
+│                               Layer ID   │   1│   1│   1│   1│
+│                               Subtable ID│   1│   1│   2│   2│
+│                      ╶───────────────────┼────┼────┼────┼────┤
+│                       No  Yes Table ID   │   1│   1│   1│   1│
+│                               Layer ID   │   1│   1│   1│   1│
+│                               Subtable ID│   3│   3│   4│   4│
+│                          ╶───────────────┼────┼────┼────┼────┤
+│                           No  Table ID   │   1│   1│   1│   1│
+│                               Layer ID   │   1│   1│   1│   1│
+│                               Subtable ID│   3│   3│   4│   4│
+│             ╶────────────────────────────┼────┼────┼────┼────┤
+│              No  QN57 Yes Yes Table ID   │   1│   1│   1│   1│
+│                               Layer ID   │   1│   1│   1│   1│
+│                               Subtable ID│   5│   5│   6│   6│
+│                          ╶───────────────┼────┼────┼────┼────┤
+│                           No  Table ID   │   1│   1│   1│   1│
+│                               Layer ID   │   1│   1│   1│   1│
+│                               Subtable ID│   5│   5│   6│   6│
+│                      ╶───────────────────┼────┼────┼────┼────┤
+│                       No  Yes Table ID   │   1│   1│   1│   1│
+│                               Layer ID   │   1│   1│   1│   1│
+│                               Subtable ID│   7│   7│   8│   8│
+│                          ╶───────────────┼────┼────┼────┼────┤
+│                           No  Table ID   │   1│   1│   1│   1│
+│                               Layer ID   │   1│   1│   1│   1│
+│                               Subtable ID│   7│   7│   8│   8│
+│    ╶─────────────────────────────────────┼────┼────┼────┼────┤
+│     No  QN61 Yes QN57 Yes Yes Table ID   │   1│   1│   1│   1│
+│                               Layer ID   │   1│   1│   1│   1│
+│                               Subtable ID│   9│   9│  10│  10│
+│                          ╶───────────────┼────┼────┼────┼────┤
+│                           No  Table ID   │   1│   1│   1│   1│
+│                               Layer ID   │   1│   1│   1│   1│
+│                               Subtable ID│   9│   9│  10│  10│
+│                      ╶───────────────────┼────┼────┼────┼────┤
+│                       No  Yes Table ID   │   1│   1│   1│   1│
+│                               Layer ID   │   1│   1│   1│   1│
+│                               Subtable ID│  11│  11│  12│  12│
+│                          ╶───────────────┼────┼────┼────┼────┤
+│                           No  Table ID   │   1│   1│   1│   1│
+│                               Layer ID   │   1│   1│   1│   1│
+│                               Subtable ID│  11│  11│  12│  12│
+│             ╶────────────────────────────┼────┼────┼────┼────┤
+│              No  QN57 Yes Yes Table ID   │   1│   1│   1│   1│
+│                               Layer ID   │   1│   1│   1│   1│
+│                               Subtable ID│  13│  13│  14│  14│
+│                          ╶───────────────┼────┼────┼────┼────┤
+│                           No  Table ID   │   1│   1│   1│   1│
+│                               Layer ID   │   1│   1│   1│   1│
+│                               Subtable ID│  13│  13│  14│  14│
+│                      ╶───────────────────┼────┼────┼────┼────┤
+│                       No  Yes Table ID   │   1│   1│   1│   1│
+│                               Layer ID   │   1│   1│   1│   1│
+│                               Subtable ID│  15│  15│  16│  16│
+│                          ╶───────────────┼────┼────┼────┼────┤
+│                           No  Table ID   │   1│   1│   1│   1│
+│                               Layer ID   │   1│   1│   1│   1│
+│                               Subtable ID│  15│  15│  16│  16│
+╰──────────────────────────────────────────┴────┴────┴────┴────╯
+
+                          Custom Tables
+Female
+╭──────────────────────────────────────────┬───────────────────╮
+│                                          │        QN27       │
+│                                          ├─────────┬─────────┤
+│                                          │   Yes   │    No   │
+│                                          ├─────────┼─────────┤
+│                                          │  QND7A  │  QND7A  │
+│                                          ├────┬────┼────┬────┤
+│                                          │ Yes│ No │ Yes│ No │
+│                                          ├────┼────┼────┼────┤
+│                                          │QN86│QN86│QN86│QN86│
+├──────────────────────────────────────────┼────┼────┼────┼────┤
+│QN26 Yes QN61 Yes QN57 Yes Yes Table ID   │   1│   1│   1│   1│
+│                               Layer ID   │   2│   2│   2│   2│
+│                               Subtable ID│  17│  17│  18│  18│
+│                          ╶───────────────┼────┼────┼────┼────┤
+│                           No  Table ID   │   1│   1│   1│   1│
+│                               Layer ID   │   2│   2│   2│   2│
+│                               Subtable ID│  17│  17│  18│  18│
+│                      ╶───────────────────┼────┼────┼────┼────┤
+│                       No  Yes Table ID   │   1│   1│   1│   1│
+│                               Layer ID   │   2│   2│   2│   2│
+│                               Subtable ID│  19│  19│  20│  20│
+│                          ╶───────────────┼────┼────┼────┼────┤
+│                           No  Table ID   │   1│   1│   1│   1│
+│                               Layer ID   │   2│   2│   2│   2│
+│                               Subtable ID│  19│  19│  20│  20│
+│             ╶────────────────────────────┼────┼────┼────┼────┤
+│              No  QN57 Yes Yes Table ID   │   1│   1│   1│   1│
+│                               Layer ID   │   2│   2│   2│   2│
+│                               Subtable ID│  21│  21│  22│  22│
+│                          ╶───────────────┼────┼────┼────┼────┤
+│                           No  Table ID   │   1│   1│   1│   1│
+│                               Layer ID   │   2│   2│   2│   2│
+│                               Subtable ID│  21│  21│  22│  22│
+│                      ╶───────────────────┼────┼────┼────┼────┤
+│                       No  Yes Table ID   │   1│   1│   1│   1│
+│                               Layer ID   │   2│   2│   2│   2│
+│                               Subtable ID│  23│  23│  24│  24│
+│                          ╶───────────────┼────┼────┼────┼────┤
+│                           No  Table ID   │   1│   1│   1│   1│
+│                               Layer ID   │   2│   2│   2│   2│
+│                               Subtable ID│  23│  23│  24│  24│
+│    ╶─────────────────────────────────────┼────┼────┼────┼────┤
+│     No  QN61 Yes QN57 Yes Yes Table ID   │   1│   1│   1│   1│
+│                               Layer ID   │   2│   2│   2│   2│
+│                               Subtable ID│  25│  25│  26│  26│
+│                          ╶───────────────┼────┼────┼────┼────┤
+│                           No  Table ID   │   1│   1│   1│   1│
+│                               Layer ID   │   2│   2│   2│   2│
+│                               Subtable ID│  25│  25│  26│  26│
+│                      ╶───────────────────┼────┼────┼────┼────┤
+│                       No  Yes Table ID   │   1│   1│   1│   1│
+│                               Layer ID   │   2│   2│   2│   2│
+│                               Subtable ID│  27│  27│  28│  28│
+│                          ╶───────────────┼────┼────┼────┼────┤
+│                           No  Table ID   │   1│   1│   1│   1│
+│                               Layer ID   │   2│   2│   2│   2│
+│                               Subtable ID│  27│  27│  28│  28│
+│             ╶────────────────────────────┼────┼────┼────┼────┤
+│              No  QN57 Yes Yes Table ID   │   1│   1│   1│   1│
+│                               Layer ID   │   2│   2│   2│   2│
+│                               Subtable ID│  29│  29│  30│  30│
+│                          ╶───────────────┼────┼────┼────┼────┤
+│                           No  Table ID   │   1│   1│   1│   1│
+│                               Layer ID   │   2│   2│   2│   2│
+│                               Subtable ID│  29│  29│  30│  30│
+│                      ╶───────────────────┼────┼────┼────┼────┤
+│                       No  Yes Table ID   │   1│   1│   1│   1│
+│                               Layer ID   │   2│   2│   2│   2│
+│                               Subtable ID│  31│  31│  32│  32│
+│                          ╶───────────────┼────┼────┼────┼────┤
+│                           No  Table ID   │   1│   1│   1│   1│
+│                               Layer ID   │   2│   2│   2│   2│
+│                               Subtable ID│  31│  31│  32│  32│
+╰──────────────────────────────────────────┴────┴────┴────┴────╯
+
+                          Custom Tables
+Male
+╭───────────────────────────────────────────┬───────────────────╮
+│                                           │        QN27       │
+│                                           ├─────────┬─────────┤
+│                                           │   Yes   │    No   │
+│                                           ├─────────┼─────────┤
+│                                           │  QND7A  │  QND7A  │
+│                                           ├────┬────┼────┬────┤
+│                                           │ Yes│ No │ Yes│ No │
+│                                           ├────┼────┼────┼────┤
+│                                           │QN86│QN86│QN86│QN86│
+├───────────────────────────────────────────┼────┼────┼────┼────┤
+│QN26 Yes QN61 Yes QN57 Yes Yes Row ID      │   1│   1│   3│   3│
+│                               Layer Row ID│   1│   1│   1│   1│
+│                          ╶────────────────┼────┼────┼────┼────┤
+│                           No  Row ID      │   2│   2│   4│   4│
+│                               Layer Row ID│   2│   2│   2│   2│
+│                      ╶────────────────────┼────┼────┼────┼────┤
+│                       No  Yes Row ID      │   6│   6│   7│   7│
+│                               Layer Row ID│   4│   4│   4│   4│
+│                          ╶────────────────┼────┼────┼────┼────┤
+│                           No  Row ID      │   5│   5│   8│   8│
+│                               Layer Row ID│   3│   3│   3│   3│
+│             ╶─────────────────────────────┼────┼────┼────┼────┤
+│              No  QN57 Yes Yes Row ID      │  10│  10│  11│  11│
+│                               Layer Row ID│   6│   6│   6│   6│
+│                          ╶────────────────┼────┼────┼────┼────┤
+│                           No  Row ID      │   9│   9│  12│  12│
+│                               Layer Row ID│   5│   5│   5│   5│
+│                      ╶────────────────────┼────┼────┼────┼────┤
+│                       No  Yes Row ID      │  13│  13│  15│  15│
+│                               Layer Row ID│   7│   7│   7│   7│
+│                          ╶────────────────┼────┼────┼────┼────┤
+│                           No  Row ID      │  14│  14│  16│  16│
+│                               Layer Row ID│   8│   8│   8│   8│
+│    ╶──────────────────────────────────────┼────┼────┼────┼────┤
+│     No  QN61 Yes QN57 Yes Yes Row ID      │  17│  17│  20│  20│
+│                               Layer Row ID│   9│   9│   9│   9│
+│                          ╶────────────────┼────┼────┼────┼────┤
+│                           No  Row ID      │  18│  18│  19│  19│
+│                               Layer Row ID│  10│  10│  10│  10│
+│                      ╶────────────────────┼────┼────┼────┼────┤
+│                       No  Yes Row ID      │  21│  21│  24│  24│
+│                               Layer Row ID│  11│  11│  11│  11│
+│                          ╶────────────────┼────┼────┼────┼────┤
+│                           No  Row ID      │  22│  22│  23│  23│
+│                               Layer Row ID│  12│  12│  12│  12│
+│             ╶─────────────────────────────┼────┼────┼────┼────┤
+│              No  QN57 Yes Yes Row ID      │  25│  25│  27│  27│
+│                               Layer Row ID│  13│  13│  13│  13│
+│                          ╶────────────────┼────┼────┼────┼────┤
+│                           No  Row ID      │  26│  26│  28│  28│
+│                               Layer Row ID│  14│  14│  14│  14│
+│                      ╶────────────────────┼────┼────┼────┼────┤
+│                       No  Yes Row ID      │  30│  30│  32│  32│
+│                               Layer Row ID│  16│  16│  16│  16│
+│                          ╶────────────────┼────┼────┼────┼────┤
+│                           No  Row ID      │  29│  29│  31│  31│
+│                               Layer Row ID│  15│  15│  15│  15│
+╰───────────────────────────────────────────┴────┴────┴────┴────╯
+
+                          Custom Tables
+Female
+╭───────────────────────────────────────────┬───────────────────╮
+│                                           │        QN27       │
+│                                           ├─────────┬─────────┤
+│                                           │   Yes   │    No   │
+│                                           ├─────────┼─────────┤
+│                                           │  QND7A  │  QND7A  │
+│                                           ├────┬────┼────┬────┤
+│                                           │ Yes│ No │ Yes│ No │
+│                                           ├────┼────┼────┼────┤
+│                                           │QN86│QN86│QN86│QN86│
+├───────────────────────────────────────────┼────┼────┼────┼────┤
+│QN26 Yes QN61 Yes QN57 Yes Yes Row ID      │  34│  34│  35│  35│
+│                               Layer Row ID│  18│  18│  18│  18│
+│                          ╶────────────────┼────┼────┼────┼────┤
+│                           No  Row ID      │  33│  33│  36│  36│
+│                               Layer Row ID│  17│  17│  17│  17│
+│                      ╶────────────────────┼────┼────┼────┼────┤
+│                       No  Yes Row ID      │  38│  38│  39│  39│
+│                               Layer Row ID│  20│  20│  20│  20│
+│                          ╶────────────────┼────┼────┼────┼────┤
+│                           No  Row ID      │  37│  37│  40│  40│
+│                               Layer Row ID│  19│  19│  19│  19│
+│             ╶─────────────────────────────┼────┼────┼────┼────┤
+│              No  QN57 Yes Yes Row ID      │  42│  42│  43│  43│
+│                               Layer Row ID│  22│  22│  22│  22│
+│                          ╶────────────────┼────┼────┼────┼────┤
+│                           No  Row ID      │  41│  41│  44│  44│
+│                               Layer Row ID│  21│  21│  21│  21│
+│                      ╶────────────────────┼────┼────┼────┼────┤
+│                       No  Yes Row ID      │  45│  45│  47│  47│
+│                               Layer Row ID│  23│  23│  23│  23│
+│                          ╶────────────────┼────┼────┼────┼────┤
+│                           No  Row ID      │  46│  46│  48│  48│
+│                               Layer Row ID│  24│  24│  24│  24│
+│    ╶──────────────────────────────────────┼────┼────┼────┼────┤
+│     No  QN61 Yes QN57 Yes Yes Row ID      │  50│  50│  51│  51│
+│                               Layer Row ID│  26│  26│  26│  26│
+│                          ╶────────────────┼────┼────┼────┼────┤
+│                           No  Row ID      │  49│  49│  52│  52│
+│                               Layer Row ID│  25│  25│  25│  25│
+│                      ╶────────────────────┼────┼────┼────┼────┤
+│                       No  Yes Row ID      │  53│  53│  55│  55│
+│                               Layer Row ID│  27│  27│  27│  27│
+│                          ╶────────────────┼────┼────┼────┼────┤
+│                           No  Row ID      │  54│  54│  56│  56│
+│                               Layer Row ID│  28│  28│  28│  28│
+│             ╶─────────────────────────────┼────┼────┼────┼────┤
+│              No  QN57 Yes Yes Row ID      │  57│  57│  59│  59│
+│                               Layer Row ID│  29│  29│  29│  29│
+│                          ╶────────────────┼────┼────┼────┼────┤
+│                           No  Row ID      │  58│  58│  60│  60│
+│                               Layer Row ID│  30│  30│  30│  30│
+│                      ╶────────────────────┼────┼────┼────┼────┤
+│                       No  Yes Row ID      │  62│  62│  64│  64│
+│                               Layer Row ID│  32│  32│  32│  32│
+│                          ╶────────────────┼────┼────┼────┼────┤
+│                           No  Row ID      │  61│  61│  63│  63│
+│                               Layer Row ID│  31│  31│  31│  31│
+╰───────────────────────────────────────────┴────┴────┴────┴────╯
+
+                            Custom Tables
+Male
+╭──────────────────────────────────────────────┬───────────────────╮
+│                                              │        QN27       │
+│                                              ├─────────┬─────────┤
+│                                              │   Yes   │    No   │
+│                                              ├─────────┼─────────┤
+│                                              │  QND7A  │  QND7A  │
+│                                              ├────┬────┼────┬────┤
+│                                              │ Yes│ No │ Yes│ No │
+│                                              ├────┼────┼────┼────┤
+│                                              │QN86│QN86│QN86│QN86│
+├──────────────────────────────────────────────┼────┼────┼────┼────┤
+│QN26 Yes QN61 Yes QN57 Yes Yes Column ID      │   1│   2│   3│   4│
+│                               Layer Column ID│   1│   2│   3│   4│
+│                          ╶───────────────────┼────┼────┼────┼────┤
+│                           No  Column ID      │   1│   2│   3│   4│
+│                               Layer Column ID│   1│   2│   3│   4│
+│                      ╶───────────────────────┼────┼────┼────┼────┤
+│                       No  Yes Column ID      │   5│   6│   7│   8│
+│                               Layer Column ID│   1│   2│   3│   4│
+│                          ╶───────────────────┼────┼────┼────┼────┤
+│                           No  Column ID      │   5│   6│   7│   8│
+│                               Layer Column ID│   1│   2│   3│   4│
+│             ╶────────────────────────────────┼────┼────┼────┼────┤
+│              No  QN57 Yes Yes Column ID      │   9│  10│  11│  12│
+│                               Layer Column ID│   1│   2│   3│   4│
+│                          ╶───────────────────┼────┼────┼────┼────┤
+│                           No  Column ID      │   9│  10│  11│  12│
+│                               Layer Column ID│   1│   2│   3│   4│
+│                      ╶───────────────────────┼────┼────┼────┼────┤
+│                       No  Yes Column ID      │  13│  14│  15│  16│
+│                               Layer Column ID│   1│   2│   3│   4│
+│                          ╶───────────────────┼────┼────┼────┼────┤
+│                           No  Column ID      │  13│  14│  15│  16│
+│                               Layer Column ID│   1│   2│   3│   4│
+│    ╶─────────────────────────────────────────┼────┼────┼────┼────┤
+│     No  QN61 Yes QN57 Yes Yes Column ID      │  17│  18│  19│  20│
+│                               Layer Column ID│   1│   2│   3│   4│
+│                          ╶───────────────────┼────┼────┼────┼────┤
+│                           No  Column ID      │  17│  18│  19│  20│
+│                               Layer Column ID│   1│   2│   3│   4│
+│                      ╶───────────────────────┼────┼────┼────┼────┤
+│                       No  Yes Column ID      │  21│  22│  23│  24│
+│                               Layer Column ID│   1│   2│   3│   4│
+│                          ╶───────────────────┼────┼────┼────┼────┤
+│                           No  Column ID      │  21│  22│  23│  24│
+│                               Layer Column ID│   1│   2│   3│   4│
+│             ╶────────────────────────────────┼────┼────┼────┼────┤
+│              No  QN57 Yes Yes Column ID      │  25│  26│  27│  28│
+│                               Layer Column ID│   1│   2│   3│   4│
+│                          ╶───────────────────┼────┼────┼────┼────┤
+│                           No  Column ID      │  25│  26│  27│  28│
+│                               Layer Column ID│   1│   2│   3│   4│
+│                      ╶───────────────────────┼────┼────┼────┼────┤
+│                       No  Yes Column ID      │  29│  30│  31│  32│
+│                               Layer Column ID│   1│   2│   3│   4│
+│                          ╶───────────────────┼────┼────┼────┼────┤
+│                           No  Column ID      │  29│  30│  31│  32│
+│                               Layer Column ID│   1│   2│   3│   4│
+╰──────────────────────────────────────────────┴────┴────┴────┴────╯
+
+                            Custom Tables
+Female
+╭──────────────────────────────────────────────┬───────────────────╮
+│                                              │        QN27       │
+│                                              ├─────────┬─────────┤
+│                                              │   Yes   │    No   │
+│                                              ├─────────┼─────────┤
+│                                              │  QND7A  │  QND7A  │
+│                                              ├────┬────┼────┬────┤
+│                                              │ Yes│ No │ Yes│ No │
+│                                              ├────┼────┼────┼────┤
+│                                              │QN86│QN86│QN86│QN86│
+├──────────────────────────────────────────────┼────┼────┼────┼────┤
+│QN26 Yes QN61 Yes QN57 Yes Yes Column ID      │  33│  34│  35│  36│
+│                               Layer Column ID│   5│   6│   7│   8│
+│                          ╶───────────────────┼────┼────┼────┼────┤
+│                           No  Column ID      │  33│  34│  35│  36│
+│                               Layer Column ID│   5│   6│   7│   8│
+│                      ╶───────────────────────┼────┼────┼────┼────┤
+│                       No  Yes Column ID      │  37│  38│  39│  40│
+│                               Layer Column ID│   5│   6│   7│   8│
+│                          ╶───────────────────┼────┼────┼────┼────┤
+│                           No  Column ID      │  37│  38│  39│  40│
+│                               Layer Column ID│   5│   6│   7│   8│
+│             ╶────────────────────────────────┼────┼────┼────┼────┤
+│              No  QN57 Yes Yes Column ID      │  41│  42│  43│  44│
+│                               Layer Column ID│   5│   6│   7│   8│
+│                          ╶───────────────────┼────┼────┼────┼────┤
+│                           No  Column ID      │  41│  42│  43│  44│
+│                               Layer Column ID│   5│   6│   7│   8│
+│                      ╶───────────────────────┼────┼────┼────┼────┤
+│                       No  Yes Column ID      │  45│  46│  47│  48│
+│                               Layer Column ID│   5│   6│   7│   8│
+│                          ╶───────────────────┼────┼────┼────┼────┤
+│                           No  Column ID      │  45│  46│  47│  48│
+│                               Layer Column ID│   5│   6│   7│   8│
+│    ╶─────────────────────────────────────────┼────┼────┼────┼────┤
+│     No  QN61 Yes QN57 Yes Yes Column ID      │  49│  50│  51│  52│
+│                               Layer Column ID│   5│   6│   7│   8│
+│                          ╶───────────────────┼────┼────┼────┼────┤
+│                           No  Column ID      │  49│  50│  51│  52│
+│                               Layer Column ID│   5│   6│   7│   8│
+│                      ╶───────────────────────┼────┼────┼────┼────┤
+│                       No  Yes Column ID      │  53│  54│  55│  56│
+│                               Layer Column ID│   5│   6│   7│   8│
+│                          ╶───────────────────┼────┼────┼────┼────┤
+│                           No  Column ID      │  53│  54│  55│  56│
+│                               Layer Column ID│   5│   6│   7│   8│
+│             ╶────────────────────────────────┼────┼────┼────┼────┤
+│              No  QN57 Yes Yes Column ID      │  57│  58│  59│  60│
+│                               Layer Column ID│   5│   6│   7│   8│
+│                          ╶───────────────────┼────┼────┼────┼────┤
+│                           No  Column ID      │  57│  58│  59│  60│
+│                               Layer Column ID│   5│   6│   7│   8│
+│                      ╶───────────────────────┼────┼────┼────┼────┤
+│                       No  Yes Column ID      │  61│  62│  63│  64│
+│                               Layer Column ID│   5│   6│   7│   8│
+│                          ╶───────────────────┼────┼────┼────┼────┤
+│                           No  Column ID      │  61│  62│  63│  64│
+│                               Layer Column ID│   5│   6│   7│   8│
+╰──────────────────────────────────────────────┴────┴────┴────┴────╯
+])
+AT_CLEANUP
+
+AT_SETUP([CTABLES area definitions with CLABELS ROWLABELS=LAYER])
+AT_KEYWORDS([ROWLABELS LAYER])
+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 qn26 > qn61 > qn57 BY qn27 > qnd7a > qn86 BY qns3a[TABLEID, LAYERID, SUBTABLEID]
+    /SLABELS POSITION=ROW
+    /CLABELS ROWLABELS=LAYER
+    /TABLE qn26 > qn61 > qn57 BY qn27 > qnd7a > qn86 BY qns3a[ROWID, LAYERROWID]
+    /SLABELS POSITION=ROW
+    /CLABELS ROWLABELS=LAYER
+    /TABLE qn26 > qn61 > qn57 BY qn27 > qnd7a > qn86 BY qns3a[COLID, LAYERCOLID]
+    /SLABELS POSITION=ROW
+    /CLABELS ROWLABELS=LAYER.
+]])
+AT_CHECK([pspp ctables.sps --table-look="$builddir"/all-layers.stt -O box=unicode -O width=120], [0], [dnl
+                          Custom Tables
+Male
+Yes
+╭──────────────────────────────────┬───────────────────────────╮
+│                                  │            QN27           │
+│                                  ├─────────────┬─────────────┤
+│                                  │     Yes     │      No     │
+│                                  ├─────────────┼─────────────┤
+│                                  │    QND7A    │    QND7A    │
+│                                  ├──────┬──────┼──────┬──────┤
+│                                  │  Yes │  No  │  Yes │  No  │
+│                                  ├──────┼──────┼──────┼──────┤
+│                                  │ QN86 │ QN86 │ QN86 │ QN86 │
+│                                  ├───┬──┼───┬──┼───┬──┼───┬──┤
+│                                  │Yes│No│Yes│No│Yes│No│Yes│No│
+├──────────────────────────────────┼───┼──┼───┼──┼───┼──┼───┼──┤
+│QN26 Yes QN61 Yes QN57 Table ID   │  1│ 1│  1│ 1│  1│ 1│  1│ 1│
+│                       Layer ID   │  2│ 2│  2│ 2│  2│ 2│  2│ 2│
+│                       Subtable ID│  2│ 2│  4│ 4│  6│ 6│  7│ 7│
+│             ╶────────────────────┼───┼──┼───┼──┼───┼──┼───┼──┤
+│              No  QN57 Table ID   │  1│ 1│  1│ 1│  1│ 1│  1│ 1│
+│                       Layer ID   │  2│ 2│  2│ 2│  2│ 2│  2│ 2│
+│                       Subtable ID│  2│ 2│  4│ 4│  6│ 6│  7│ 7│
+│    ╶─────────────────────────────┼───┼──┼───┼──┼───┼──┼───┼──┤
+│     No  QN61 Yes QN57 Table ID   │  1│ 1│  1│ 1│  1│ 1│  1│ 1│
+│                       Layer ID   │  2│ 2│  2│ 2│  2│ 2│  2│ 2│
+│                       Subtable ID│ 10│10│ 12│12│ 13│13│ 15│15│
+│             ╶────────────────────┼───┼──┼───┼──┼───┼──┼───┼──┤
+│              No  QN57 Table ID   │  1│ 1│  1│ 1│  1│ 1│  1│ 1│
+│                       Layer ID   │  2│ 2│  2│ 2│  2│ 2│  2│ 2│
+│                       Subtable ID│ 10│10│ 12│12│ 13│13│ 15│15│
+╰──────────────────────────────────┴───┴──┴───┴──┴───┴──┴───┴──╯
+
+                          Custom Tables
+Male
+No
+╭──────────────────────────────────┬───────────────────────────╮
+│                                  │            QN27           │
+│                                  ├─────────────┬─────────────┤
+│                                  │     Yes     │      No     │
+│                                  ├─────────────┼─────────────┤
+│                                  │    QND7A    │    QND7A    │
+│                                  ├──────┬──────┼──────┬──────┤
+│                                  │  Yes │  No  │  Yes │  No  │
+│                                  ├──────┼──────┼──────┼──────┤
+│                                  │ QN86 │ QN86 │ QN86 │ QN86 │
+│                                  ├───┬──┼───┬──┼───┬──┼───┬──┤
+│                                  │Yes│No│Yes│No│Yes│No│Yes│No│
+├──────────────────────────────────┼───┼──┼───┼──┼───┼──┼───┼──┤
+│QN26 Yes QN61 Yes QN57 Table ID   │  1│ 1│  1│ 1│  1│ 1│  1│ 1│
+│                       Layer ID   │  1│ 1│  1│ 1│  1│ 1│  1│ 1│
+│                       Subtable ID│  1│ 1│  3│ 3│  5│ 5│  8│ 8│
+│             ╶────────────────────┼───┼──┼───┼──┼───┼──┼───┼──┤
+│              No  QN57 Table ID   │  1│ 1│  1│ 1│  1│ 1│  1│ 1│
+│                       Layer ID   │  1│ 1│  1│ 1│  1│ 1│  1│ 1│
+│                       Subtable ID│  1│ 1│  3│ 3│  5│ 5│  8│ 8│
+│    ╶─────────────────────────────┼───┼──┼───┼──┼───┼──┼───┼──┤
+│     No  QN61 Yes QN57 Table ID   │  1│ 1│  1│ 1│  1│ 1│  1│ 1│
+│                       Layer ID   │  1│ 1│  1│ 1│  1│ 1│  1│ 1│
+│                       Subtable ID│  9│ 9│ 11│11│ 14│14│ 16│16│
+│             ╶────────────────────┼───┼──┼───┼──┼───┼──┼───┼──┤
+│              No  QN57 Table ID   │  1│ 1│  1│ 1│  1│ 1│  1│ 1│
+│                       Layer ID   │  1│ 1│  1│ 1│  1│ 1│  1│ 1│
+│                       Subtable ID│  9│ 9│ 11│11│ 14│14│ 16│16│
+╰──────────────────────────────────┴───┴──┴───┴──┴───┴──┴───┴──╯
+
+                          Custom Tables
+Female
+Yes
+╭──────────────────────────────────┬───────────────────────────╮
+│                                  │            QN27           │
+│                                  ├─────────────┬─────────────┤
+│                                  │     Yes     │      No     │
+│                                  ├─────────────┼─────────────┤
+│                                  │    QND7A    │    QND7A    │
+│                                  ├──────┬──────┼──────┬──────┤
+│                                  │  Yes │  No  │  Yes │  No  │
+│                                  ├──────┼──────┼──────┼──────┤
+│                                  │ QN86 │ QN86 │ QN86 │ QN86 │
+│                                  ├───┬──┼───┬──┼───┬──┼───┬──┤
+│                                  │Yes│No│Yes│No│Yes│No│Yes│No│
+├──────────────────────────────────┼───┼──┼───┼──┼───┼──┼───┼──┤
+│QN26 Yes QN61 Yes QN57 Table ID   │  1│ 1│  1│ 1│  1│ 1│  1│ 1│
+│                       Layer ID   │  4│ 4│  4│ 4│  4│ 4│  4│ 4│
+│                       Subtable ID│ 18│18│ 20│20│ 21│21│ 23│23│
+│             ╶────────────────────┼───┼──┼───┼──┼───┼──┼───┼──┤
+│              No  QN57 Table ID   │  1│ 1│  1│ 1│  1│ 1│  1│ 1│
+│                       Layer ID   │  4│ 4│  4│ 4│  4│ 4│  4│ 4│
+│                       Subtable ID│ 18│18│ 20│20│ 21│21│ 23│23│
+│    ╶─────────────────────────────┼───┼──┼───┼──┼───┼──┼───┼──┤
+│     No  QN61 Yes QN57 Table ID   │  1│ 1│  1│ 1│  1│ 1│  1│ 1│
+│                       Layer ID   │  4│ 4│  4│ 4│  4│ 4│  4│ 4│
+│                       Subtable ID│ 26│26│ 27│27│ 30│30│ 31│31│
+│             ╶────────────────────┼───┼──┼───┼──┼───┼──┼───┼──┤
+│              No  QN57 Table ID   │  1│ 1│  1│ 1│  1│ 1│  1│ 1│
+│                       Layer ID   │  4│ 4│  4│ 4│  4│ 4│  4│ 4│
+│                       Subtable ID│ 26│26│ 27│27│ 30│30│ 31│31│
+╰──────────────────────────────────┴───┴──┴───┴──┴───┴──┴───┴──╯
+
+                          Custom Tables
+Female
+No
+╭──────────────────────────────────┬───────────────────────────╮
+│                                  │            QN27           │
+│                                  ├─────────────┬─────────────┤
+│                                  │     Yes     │      No     │
+│                                  ├─────────────┼─────────────┤
+│                                  │    QND7A    │    QND7A    │
+│                                  ├──────┬──────┼──────┬──────┤
+│                                  │  Yes │  No  │  Yes │  No  │
+│                                  ├──────┼──────┼──────┼──────┤
+│                                  │ QN86 │ QN86 │ QN86 │ QN86 │
+│                                  ├───┬──┼───┬──┼───┬──┼───┬──┤
+│                                  │Yes│No│Yes│No│Yes│No│Yes│No│
+├──────────────────────────────────┼───┼──┼───┼──┼───┼──┼───┼──┤
+│QN26 Yes QN61 Yes QN57 Table ID   │  1│ 1│  1│ 1│  1│ 1│  1│ 1│
+│                       Layer ID   │  3│ 3│  3│ 3│  3│ 3│  3│ 3│
+│                       Subtable ID│ 17│17│ 19│19│ 22│22│ 24│24│
+│             ╶────────────────────┼───┼──┼───┼──┼───┼──┼───┼──┤
+│              No  QN57 Table ID   │  1│ 1│  1│ 1│  1│ 1│  1│ 1│
+│                       Layer ID   │  3│ 3│  3│ 3│  3│ 3│  3│ 3│
+│                       Subtable ID│ 17│17│ 19│19│ 22│22│ 24│24│
+│    ╶─────────────────────────────┼───┼──┼───┼──┼───┼──┼───┼──┤
+│     No  QN61 Yes QN57 Table ID   │  1│ 1│  1│ 1│  1│ 1│  1│ 1│
+│                       Layer ID   │  3│ 3│  3│ 3│  3│ 3│  3│ 3│
+│                       Subtable ID│ 25│25│ 28│28│ 29│29│ 32│32│
+│             ╶────────────────────┼───┼──┼───┼──┼───┼──┼───┼──┤
+│              No  QN57 Table ID   │  1│ 1│  1│ 1│  1│ 1│  1│ 1│
+│                       Layer ID   │  3│ 3│  3│ 3│  3│ 3│  3│ 3│
+│                       Subtable ID│ 25│25│ 28│28│ 29│29│ 32│32│
+╰──────────────────────────────────┴───┴──┴───┴──┴───┴──┴───┴──╯
+
+                          Custom Tables
+Male
+Yes
+╭───────────────────────────────────┬───────────────────────────╮
+│                                   │            QN27           │
+│                                   ├─────────────┬─────────────┤
+│                                   │     Yes     │      No     │
+│                                   ├─────────────┼─────────────┤
+│                                   │    QND7A    │    QND7A    │
+│                                   ├──────┬──────┼──────┬──────┤
+│                                   │  Yes │  No  │  Yes │  No  │
+│                                   ├──────┼──────┼──────┼──────┤
+│                                   │ QN86 │ QN86 │ QN86 │ QN86 │
+│                                   ├───┬──┼───┬──┼───┬──┼───┬──┤
+│                                   │Yes│No│Yes│No│Yes│No│Yes│No│
+├───────────────────────────────────┼───┼──┼───┼──┼───┼──┼───┼──┤
+│QN26 Yes QN61 Yes QN57 Row ID      │  1│ 1│  3│ 3│  6│ 6│  7│ 7│
+│                       Layer Row ID│  1│ 1│  1│ 1│  1│ 1│  1│ 1│
+│             ╶─────────────────────┼───┼──┼───┼──┼───┼──┼───┼──┤
+│              No  QN57 Row ID      │ 10│10│ 11│11│ 13│13│ 15│15│
+│                       Layer Row ID│  4│ 4│  4│ 4│  4│ 4│  4│ 4│
+│    ╶──────────────────────────────┼───┼──┼───┼──┼───┼──┼───┼──┤
+│     No  QN61 Yes QN57 Row ID      │ 17│17│ 20│20│ 21│21│ 24│24│
+│                       Layer Row ID│  5│ 5│  5│ 5│  5│ 5│  5│ 5│
+│             ╶─────────────────────┼───┼──┼───┼──┼───┼──┼───┼──┤
+│              No  QN57 Row ID      │ 25│25│ 28│28│ 30│30│ 31│31│
+│                       Layer Row ID│  7│ 7│  7│ 7│  7│ 7│  7│ 7│
+╰───────────────────────────────────┴───┴──┴───┴──┴───┴──┴───┴──╯
+
+                          Custom Tables
+Male
+No
+╭───────────────────────────────────┬───────────────────────────╮
+│                                   │            QN27           │
+│                                   ├─────────────┬─────────────┤
+│                                   │     Yes     │      No     │
+│                                   ├─────────────┼─────────────┤
+│                                   │    QND7A    │    QND7A    │
+│                                   ├──────┬──────┼──────┬──────┤
+│                                   │  Yes │  No  │  Yes │  No  │
+│                                   ├──────┼──────┼──────┼──────┤
+│                                   │ QN86 │ QN86 │ QN86 │ QN86 │
+│                                   ├───┬──┼───┬──┼───┬──┼───┬──┤
+│                                   │Yes│No│Yes│No│Yes│No│Yes│No│
+├───────────────────────────────────┼───┼──┼───┼──┼───┼──┼───┼──┤
+│QN26 Yes QN61 Yes QN57 Row ID      │  2│ 2│  4│ 4│  5│ 5│  8│ 8│
+│                       Layer Row ID│  2│ 2│  2│ 2│  2│ 2│  2│ 2│
+│             ╶─────────────────────┼───┼──┼───┼──┼───┼──┼───┼──┤
+│              No  QN57 Row ID      │  9│ 9│ 12│12│ 14│14│ 16│16│
+│                       Layer Row ID│  3│ 3│  3│ 3│  3│ 3│  3│ 3│
+│    ╶──────────────────────────────┼───┼──┼───┼──┼───┼──┼───┼──┤
+│     No  QN61 Yes QN57 Row ID      │ 18│18│ 19│19│ 22│22│ 23│23│
+│                       Layer Row ID│  6│ 6│  6│ 6│  6│ 6│  6│ 6│
+│             ╶─────────────────────┼───┼──┼───┼──┼───┼──┼───┼──┤
+│              No  QN57 Row ID      │ 26│26│ 27│27│ 29│29│ 32│32│
+│                       Layer Row ID│  8│ 8│  8│ 8│  8│ 8│  8│ 8│
+╰───────────────────────────────────┴───┴──┴───┴──┴───┴──┴───┴──╯
+
+                          Custom Tables
+Female
+Yes
+╭───────────────────────────────────┬───────────────────────────╮
+│                                   │            QN27           │
+│                                   ├─────────────┬─────────────┤
+│                                   │     Yes     │      No     │
+│                                   ├─────────────┼─────────────┤
+│                                   │    QND7A    │    QND7A    │
+│                                   ├──────┬──────┼──────┬──────┤
+│                                   │  Yes │  No  │  Yes │  No  │
+│                                   ├──────┼──────┼──────┼──────┤
+│                                   │ QN86 │ QN86 │ QN86 │ QN86 │
+│                                   ├───┬──┼───┬──┼───┬──┼───┬──┤
+│                                   │Yes│No│Yes│No│Yes│No│Yes│No│
+├───────────────────────────────────┼───┼──┼───┼──┼───┼──┼───┼──┤
+│QN26 Yes QN61 Yes QN57 Row ID      │ 34│34│ 36│36│ 38│38│ 39│39│
+│                       Layer Row ID│ 10│10│ 10│10│ 10│10│ 10│10│
+│             ╶─────────────────────┼───┼──┼───┼──┼───┼──┼───┼──┤
+│              No  QN57 Row ID      │ 41│41│ 43│43│ 46│46│ 47│47│
+│                       Layer Row ID│ 11│11│ 11│11│ 11│11│ 11│11│
+│    ╶──────────────────────────────┼───┼──┼───┼──┼───┼──┼───┼──┤
+│     No  QN61 Yes QN57 Row ID      │ 50│50│ 51│51│ 53│53│ 56│56│
+│                       Layer Row ID│ 14│14│ 14│14│ 14│14│ 14│14│
+│             ╶─────────────────────┼───┼──┼───┼──┼───┼──┼───┼──┤
+│              No  QN57 Row ID      │ 58│58│ 59│59│ 62│62│ 63│63│
+│                       Layer Row ID│ 16│16│ 16│16│ 16│16│ 16│16│
+╰───────────────────────────────────┴───┴──┴───┴──┴───┴──┴───┴──╯
+
+                          Custom Tables
+Female
+No
+╭───────────────────────────────────┬───────────────────────────╮
+│                                   │            QN27           │
+│                                   ├─────────────┬─────────────┤
+│                                   │     Yes     │      No     │
+│                                   ├─────────────┼─────────────┤
+│                                   │    QND7A    │    QND7A    │
+│                                   ├──────┬──────┼──────┬──────┤
+│                                   │  Yes │  No  │  Yes │  No  │
+│                                   ├──────┼──────┼──────┼──────┤
+│                                   │ QN86 │ QN86 │ QN86 │ QN86 │
+│                                   ├───┬──┼───┬──┼───┬──┼───┬──┤
+│                                   │Yes│No│Yes│No│Yes│No│Yes│No│
+├───────────────────────────────────┼───┼──┼───┼──┼───┼──┼───┼──┤
+│QN26 Yes QN61 Yes QN57 Row ID      │ 33│33│ 35│35│ 37│37│ 40│40│
+│                       Layer Row ID│  9│ 9│  9│ 9│  9│ 9│  9│ 9│
+│             ╶─────────────────────┼───┼──┼───┼──┼───┼──┼───┼──┤
+│              No  QN57 Row ID      │ 42│42│ 44│44│ 45│45│ 48│48│
+│                       Layer Row ID│ 12│12│ 12│12│ 12│12│ 12│12│
+│    ╶──────────────────────────────┼───┼──┼───┼──┼───┼──┼───┼──┤
+│     No  QN61 Yes QN57 Row ID      │ 49│49│ 52│52│ 54│54│ 55│55│
+│                       Layer Row ID│ 13│13│ 13│13│ 13│13│ 13│13│
+│             ╶─────────────────────┼───┼──┼───┼──┼───┼──┼───┼──┤
+│              No  QN57 Row ID      │ 57│57│ 60│60│ 61│61│ 64│64│
+│                       Layer Row ID│ 15│15│ 15│15│ 15│15│ 15│15│
+╰───────────────────────────────────┴───┴──┴───┴──┴───┴──┴───┴──╯
+
+                            Custom Tables
+Male
+Yes
+╭──────────────────────────────────────┬───────────────────────────╮
+│                                      │            QN27           │
+│                                      ├─────────────┬─────────────┤
+│                                      │     Yes     │      No     │
+│                                      ├─────────────┼─────────────┤
+│                                      │    QND7A    │    QND7A    │
+│                                      ├──────┬──────┼──────┬──────┤
+│                                      │  Yes │  No  │  Yes │  No  │
+│                                      ├──────┼──────┼──────┼──────┤
+│                                      │ QN86 │ QN86 │ QN86 │ QN86 │
+│                                      ├───┬──┼───┬──┼───┬──┼───┬──┤
+│                                      │Yes│No│Yes│No│Yes│No│Yes│No│
+├──────────────────────────────────────┼───┼──┼───┼──┼───┼──┼───┼──┤
+│QN26 Yes QN61 Yes QN57 Column ID      │  1│ 4│  6│ 8│  9│11│ 14│15│
+│                       Layer Column ID│  1│ 4│  6│ 8│  9│11│ 14│15│
+│             ╶────────────────────────┼───┼──┼───┼──┼───┼──┼───┼──┤
+│              No  QN57 Column ID      │  1│ 4│  6│ 8│  9│11│ 14│15│
+│                       Layer Column ID│  1│ 4│  6│ 8│  9│11│ 14│15│
+│    ╶─────────────────────────────────┼───┼──┼───┼──┼───┼──┼───┼──┤
+│     No  QN61 Yes QN57 Column ID      │ 18│19│ 22│23│ 25│27│ 29│32│
+│                       Layer Column ID│  1│ 4│  6│ 8│  9│11│ 14│15│
+│             ╶────────────────────────┼───┼──┼───┼──┼───┼──┼───┼──┤
+│              No  QN57 Column ID      │ 18│19│ 22│23│ 25│27│ 29│32│
+│                       Layer Column ID│  1│ 4│  6│ 8│  9│11│ 14│15│
+╰──────────────────────────────────────┴───┴──┴───┴──┴───┴──┴───┴──╯
+
+                            Custom Tables
+Male
+No
+╭──────────────────────────────────────┬───────────────────────────╮
+│                                      │            QN27           │
+│                                      ├─────────────┬─────────────┤
+│                                      │     Yes     │      No     │
+│                                      ├─────────────┼─────────────┤
+│                                      │    QND7A    │    QND7A    │
+│                                      ├──────┬──────┼──────┬──────┤
+│                                      │  Yes │  No  │  Yes │  No  │
+│                                      ├──────┼──────┼──────┼──────┤
+│                                      │ QN86 │ QN86 │ QN86 │ QN86 │
+│                                      ├───┬──┼───┬──┼───┬──┼───┬──┤
+│                                      │Yes│No│Yes│No│Yes│No│Yes│No│
+├──────────────────────────────────────┼───┼──┼───┼──┼───┼──┼───┼──┤
+│QN26 Yes QN61 Yes QN57 Column ID      │  2│ 3│  5│ 7│ 10│12│ 13│16│
+│                       Layer Column ID│  2│ 3│  5│ 7│ 10│12│ 13│16│
+│             ╶────────────────────────┼───┼──┼───┼──┼───┼──┼───┼──┤
+│              No  QN57 Column ID      │  2│ 3│  5│ 7│ 10│12│ 13│16│
+│                       Layer Column ID│  2│ 3│  5│ 7│ 10│12│ 13│16│
+│    ╶─────────────────────────────────┼───┼──┼───┼──┼───┼──┼───┼──┤
+│     No  QN61 Yes QN57 Column ID      │ 17│20│ 21│24│ 26│28│ 30│31│
+│                       Layer Column ID│  2│ 3│  5│ 7│ 10│12│ 13│16│
+│             ╶────────────────────────┼───┼──┼───┼──┼───┼──┼───┼──┤
+│              No  QN57 Column ID      │ 17│20│ 21│24│ 26│28│ 30│31│
+│                       Layer Column ID│  2│ 3│  5│ 7│ 10│12│ 13│16│
+╰──────────────────────────────────────┴───┴──┴───┴──┴───┴──┴───┴──╯
+
+                            Custom Tables
+Female
+Yes
+╭──────────────────────────────────────┬───────────────────────────╮
+│                                      │            QN27           │
+│                                      ├─────────────┬─────────────┤
+│                                      │     Yes     │      No     │
+│                                      ├─────────────┼─────────────┤
+│                                      │    QND7A    │    QND7A    │
+│                                      ├──────┬──────┼──────┬──────┤
+│                                      │  Yes │  No  │  Yes │  No  │
+│                                      ├──────┼──────┼──────┼──────┤
+│                                      │ QN86 │ QN86 │ QN86 │ QN86 │
+│                                      ├───┬──┼───┬──┼───┬──┼───┬──┤
+│                                      │Yes│No│Yes│No│Yes│No│Yes│No│
+├──────────────────────────────────────┼───┼──┼───┼──┼───┼──┼───┼──┤
+│QN26 Yes QN61 Yes QN57 Column ID      │ 33│36│ 37│39│ 42│44│ 45│47│
+│                       Layer Column ID│ 17│20│ 21│23│ 26│28│ 29│31│
+│             ╶────────────────────────┼───┼──┼───┼──┼───┼──┼───┼──┤
+│              No  QN57 Column ID      │ 33│36│ 37│39│ 42│44│ 45│47│
+│                       Layer Column ID│ 17│20│ 21│23│ 26│28│ 29│31│
+│    ╶─────────────────────────────────┼───┼──┼───┼──┼───┼──┼───┼──┤
+│     No  QN61 Yes QN57 Column ID      │ 49│51│ 54│56│ 57│60│ 62│64│
+│                       Layer Column ID│ 17│20│ 21│23│ 26│28│ 29│31│
+│             ╶────────────────────────┼───┼──┼───┼──┼───┼──┼───┼──┤
+│              No  QN57 Column ID      │ 49│51│ 54│56│ 57│60│ 62│64│
+│                       Layer Column ID│ 17│20│ 21│23│ 26│28│ 29│31│
+╰──────────────────────────────────────┴───┴──┴───┴──┴───┴──┴───┴──╯
+
+                            Custom Tables
+Female
+No
+╭──────────────────────────────────────┬───────────────────────────╮
+│                                      │            QN27           │
+│                                      ├─────────────┬─────────────┤
+│                                      │     Yes     │      No     │
+│                                      ├─────────────┼─────────────┤
+│                                      │    QND7A    │    QND7A    │
+│                                      ├──────┬──────┼──────┬──────┤
+│                                      │  Yes │  No  │  Yes │  No  │
+│                                      ├──────┼──────┼──────┼──────┤
+│                                      │ QN86 │ QN86 │ QN86 │ QN86 │
+│                                      ├───┬──┼───┬──┼───┬──┼───┬──┤
+│                                      │Yes│No│Yes│No│Yes│No│Yes│No│
+├──────────────────────────────────────┼───┼──┼───┼──┼───┼──┼───┼──┤
+│QN26 Yes QN61 Yes QN57 Column ID      │ 34│35│ 38│40│ 41│43│ 46│48│
+│                       Layer Column ID│ 18│19│ 22│24│ 25│27│ 30│32│
+│             ╶────────────────────────┼───┼──┼───┼──┼───┼──┼───┼──┤
+│              No  QN57 Column ID      │ 34│35│ 38│40│ 41│43│ 46│48│
+│                       Layer Column ID│ 18│19│ 22│24│ 25│27│ 30│32│
+│    ╶─────────────────────────────────┼───┼──┼───┼──┼───┼──┼───┼──┤
+│     No  QN61 Yes QN57 Column ID      │ 50│52│ 53│55│ 58│59│ 61│63│
+│                       Layer Column ID│ 18│19│ 22│24│ 25│27│ 30│32│
+│             ╶────────────────────────┼───┼──┼───┼──┼───┼──┼───┼──┤
+│              No  QN57 Column ID      │ 50│52│ 53│55│ 58│59│ 61│63│
+│                       Layer Column ID│ 18│19│ 22│24│ 25│27│ 30│32│
+╰──────────────────────────────────────┴───┴──┴───┴──┴───┴──┴───┴──╯
+])
+AT_CLEANUP
+
+AT_SETUP([CTABLES area definitions with CLABELS COLLABELS=LAYER])
+AT_KEYWORDS([COLLABELS LAYER])
+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 qn26 > qn61 > qn57 BY qn27 > qnd7a > qn86 BY qns3a[TABLEID, LAYERID, SUBTABLEID]
+    /SLABELS POSITION=ROW
+    /CLABELS COLLABELS=LAYER
+    /TABLE qn26 > qn61 > qn57 BY qn27 > qnd7a > qn86 BY qns3a[ROWID, LAYERROWID]
+    /SLABELS POSITION=ROW
+    /CLABELS COLLABELS=LAYER
+    /TABLE qn26 > qn61 > qn57 BY qn27 > qnd7a > qn86 BY qns3a[COLID, LAYERCOLID]
+    /SLABELS POSITION=ROW
+    /CLABELS COLLABELS=LAYER.
+]])
+AT_CHECK([pspp ctables.sps --table-look="$builddir"/all-layers.stt -O box=unicode -O width=120], [0], [dnl
+                        Custom Tables
+Male
+Yes
+╭──────────────────────────────────────┬───────────────────╮
+│                                      │        QN27       │
+│                                      ├─────────┬─────────┤
+│                                      │   Yes   │    No   │
+│                                      ├─────────┼─────────┤
+│                                      │  QND7A  │  QND7A  │
+│                                      ├────┬────┼────┬────┤
+│                                      │ Yes│ No │ Yes│ No │
+│                                      ├────┼────┼────┼────┤
+│                                      │QN86│QN86│QN86│QN86│
+├──────────────────────────────────────┼────┼────┼────┼────┤
+│QN26 Yes QN61 Yes QN57 Yes Table ID   │   1│   1│   1│   1│
+│                           Layer ID   │   2│   2│   2│   2│
+│                           Subtable ID│   2│   2│   4│   4│
+│                      ╶───────────────┼────┼────┼────┼────┤
+│                       No  Table ID   │   1│   1│   1│   1│
+│                           Layer ID   │   2│   2│   2│   2│
+│                           Subtable ID│   2│   2│   4│   4│
+│             ╶────────────────────────┼────┼────┼────┼────┤
+│              No  QN57 Yes Table ID   │   1│   1│   1│   1│
+│                           Layer ID   │   2│   2│   2│   2│
+│                           Subtable ID│   5│   5│   8│   8│
+│                      ╶───────────────┼────┼────┼────┼────┤
+│                       No  Table ID   │   1│   1│   1│   1│
+│                           Layer ID   │   2│   2│   2│   2│
+│                           Subtable ID│   5│   5│   8│   8│
+│    ╶─────────────────────────────────┼────┼────┼────┼────┤
+│     No  QN61 Yes QN57 Yes Table ID   │   1│   1│   1│   1│
+│                           Layer ID   │   2│   2│   2│   2│
+│                           Subtable ID│   9│   9│  12│  12│
+│                      ╶───────────────┼────┼────┼────┼────┤
+│                       No  Table ID   │   1│   1│   1│   1│
+│                           Layer ID   │   2│   2│   2│   2│
+│                           Subtable ID│   9│   9│  12│  12│
+│             ╶────────────────────────┼────┼────┼────┼────┤
+│              No  QN57 Yes Table ID   │   1│   1│   1│   1│
+│                           Layer ID   │   2│   2│   2│   2│
+│                           Subtable ID│  14│  14│  15│  15│
+│                      ╶───────────────┼────┼────┼────┼────┤
+│                       No  Table ID   │   1│   1│   1│   1│
+│                           Layer ID   │   2│   2│   2│   2│
+│                           Subtable ID│  14│  14│  15│  15│
+╰──────────────────────────────────────┴────┴────┴────┴────╯
+
+                        Custom Tables
+Male
+No
+╭──────────────────────────────────────┬───────────────────╮
+│                                      │        QN27       │
+│                                      ├─────────┬─────────┤
+│                                      │   Yes   │    No   │
+│                                      ├─────────┼─────────┤
+│                                      │  QND7A  │  QND7A  │
+│                                      ├────┬────┼────┬────┤
+│                                      │ Yes│ No │ Yes│ No │
+│                                      ├────┼────┼────┼────┤
+│                                      │QN86│QN86│QN86│QN86│
+├──────────────────────────────────────┼────┼────┼────┼────┤
+│QN26 Yes QN61 Yes QN57 Yes Table ID   │   1│   1│   1│   1│
+│                           Layer ID   │   1│   1│   1│   1│
+│                           Subtable ID│   1│   1│   3│   3│
+│                      ╶───────────────┼────┼────┼────┼────┤
+│                       No  Table ID   │   1│   1│   1│   1│
+│                           Layer ID   │   1│   1│   1│   1│
+│                           Subtable ID│   1│   1│   3│   3│
+│             ╶────────────────────────┼────┼────┼────┼────┤
+│              No  QN57 Yes Table ID   │   1│   1│   1│   1│
+│                           Layer ID   │   1│   1│   1│   1│
+│                           Subtable ID│   6│   6│   7│   7│
+│                      ╶───────────────┼────┼────┼────┼────┤
+│                       No  Table ID   │   1│   1│   1│   1│
+│                           Layer ID   │   1│   1│   1│   1│
+│                           Subtable ID│   6│   6│   7│   7│
+│    ╶─────────────────────────────────┼────┼────┼────┼────┤
+│     No  QN61 Yes QN57 Yes Table ID   │   1│   1│   1│   1│
+│                           Layer ID   │   1│   1│   1│   1│
+│                           Subtable ID│  10│  10│  11│  11│
+│                      ╶───────────────┼────┼────┼────┼────┤
+│                       No  Table ID   │   1│   1│   1│   1│
+│                           Layer ID   │   1│   1│   1│   1│
+│                           Subtable ID│  10│  10│  11│  11│
+│             ╶────────────────────────┼────┼────┼────┼────┤
+│              No  QN57 Yes Table ID   │   1│   1│   1│   1│
+│                           Layer ID   │   1│   1│   1│   1│
+│                           Subtable ID│  13│  13│  16│  16│
+│                      ╶───────────────┼────┼────┼────┼────┤
+│                       No  Table ID   │   1│   1│   1│   1│
+│                           Layer ID   │   1│   1│   1│   1│
+│                           Subtable ID│  13│  13│  16│  16│
+╰──────────────────────────────────────┴────┴────┴────┴────╯
+
+                        Custom Tables
+Female
+Yes
+╭──────────────────────────────────────┬───────────────────╮
+│                                      │        QN27       │
+│                                      ├─────────┬─────────┤
+│                                      │   Yes   │    No   │
+│                                      ├─────────┼─────────┤
+│                                      │  QND7A  │  QND7A  │
+│                                      ├────┬────┼────┬────┤
+│                                      │ Yes│ No │ Yes│ No │
+│                                      ├────┼────┼────┼────┤
+│                                      │QN86│QN86│QN86│QN86│
+├──────────────────────────────────────┼────┼────┼────┼────┤
+│QN26 Yes QN61 Yes QN57 Yes Table ID   │   1│   1│   1│   1│
+│                           Layer ID   │   4│   4│   4│   4│
+│                           Subtable ID│  18│  18│  20│  20│
+│                      ╶───────────────┼────┼────┼────┼────┤
+│                       No  Table ID   │   1│   1│   1│   1│
+│                           Layer ID   │   4│   4│   4│   4│
+│                           Subtable ID│  18│  18│  20│  20│
+│             ╶────────────────────────┼────┼────┼────┼────┤
+│              No  QN57 Yes Table ID   │   1│   1│   1│   1│
+│                           Layer ID   │   4│   4│   4│   4│
+│                           Subtable ID│  21│  21│  23│  23│
+│                      ╶───────────────┼────┼────┼────┼────┤
+│                       No  Table ID   │   1│   1│   1│   1│
+│                           Layer ID   │   4│   4│   4│   4│
+│                           Subtable ID│  21│  21│  23│  23│
+│    ╶─────────────────────────────────┼────┼────┼────┼────┤
+│     No  QN61 Yes QN57 Yes Table ID   │   1│   1│   1│   1│
+│                           Layer ID   │   4│   4│   4│   4│
+│                           Subtable ID│  25│  25│  28│  28│
+│                      ╶───────────────┼────┼────┼────┼────┤
+│                       No  Table ID   │   1│   1│   1│   1│
+│                           Layer ID   │   4│   4│   4│   4│
+│                           Subtable ID│  25│  25│  28│  28│
+│             ╶────────────────────────┼────┼────┼────┼────┤
+│              No  QN57 Yes Table ID   │   1│   1│   1│   1│
+│                           Layer ID   │   4│   4│   4│   4│
+│                           Subtable ID│  30│  30│  32│  32│
+│                      ╶───────────────┼────┼────┼────┼────┤
+│                       No  Table ID   │   1│   1│   1│   1│
+│                           Layer ID   │   4│   4│   4│   4│
+│                           Subtable ID│  30│  30│  32│  32│
+╰──────────────────────────────────────┴────┴────┴────┴────╯
+
+                        Custom Tables
+Female
+No
+╭──────────────────────────────────────┬───────────────────╮
+│                                      │        QN27       │
+│                                      ├─────────┬─────────┤
+│                                      │   Yes   │    No   │
+│                                      ├─────────┼─────────┤
+│                                      │  QND7A  │  QND7A  │
+│                                      ├────┬────┼────┬────┤
+│                                      │ Yes│ No │ Yes│ No │
+│                                      ├────┼────┼────┼────┤
+│                                      │QN86│QN86│QN86│QN86│
+├──────────────────────────────────────┼────┼────┼────┼────┤
+│QN26 Yes QN61 Yes QN57 Yes Table ID   │   1│   1│   1│   1│
+│                           Layer ID   │   3│   3│   3│   3│
+│                           Subtable ID│  17│  17│  19│  19│
+│                      ╶───────────────┼────┼────┼────┼────┤
+│                       No  Table ID   │   1│   1│   1│   1│
+│                           Layer ID   │   3│   3│   3│   3│
+│                           Subtable ID│  17│  17│  19│  19│
+│             ╶────────────────────────┼────┼────┼────┼────┤
+│              No  QN57 Yes Table ID   │   1│   1│   1│   1│
+│                           Layer ID   │   3│   3│   3│   3│
+│                           Subtable ID│  22│  22│  24│  24│
+│                      ╶───────────────┼────┼────┼────┼────┤
+│                       No  Table ID   │   1│   1│   1│   1│
+│                           Layer ID   │   3│   3│   3│   3│
+│                           Subtable ID│  22│  22│  24│  24│
+│    ╶─────────────────────────────────┼────┼────┼────┼────┤
+│     No  QN61 Yes QN57 Yes Table ID   │   1│   1│   1│   1│
+│                           Layer ID   │   3│   3│   3│   3│
+│                           Subtable ID│  26│  26│  27│  27│
+│                      ╶───────────────┼────┼────┼────┼────┤
+│                       No  Table ID   │   1│   1│   1│   1│
+│                           Layer ID   │   3│   3│   3│   3│
+│                           Subtable ID│  26│  26│  27│  27│
+│             ╶────────────────────────┼────┼────┼────┼────┤
+│              No  QN57 Yes Table ID   │   1│   1│   1│   1│
+│                           Layer ID   │   3│   3│   3│   3│
+│                           Subtable ID│  29│  29│  31│  31│
+│                      ╶───────────────┼────┼────┼────┼────┤
+│                       No  Table ID   │   1│   1│   1│   1│
+│                           Layer ID   │   3│   3│   3│   3│
+│                           Subtable ID│  29│  29│  31│  31│
+╰──────────────────────────────────────┴────┴────┴────┴────╯
+
+                        Custom Tables
+Male
+Yes
+╭───────────────────────────────────────┬───────────────────╮
+│                                       │        QN27       │
+│                                       ├─────────┬─────────┤
+│                                       │   Yes   │    No   │
+│                                       ├─────────┼─────────┤
+│                                       │  QND7A  │  QND7A  │
+│                                       ├────┬────┼────┬────┤
+│                                       │ Yes│ No │ Yes│ No │
+│                                       ├────┼────┼────┼────┤
+│                                       │QN86│QN86│QN86│QN86│
+├───────────────────────────────────────┼────┼────┼────┼────┤
+│QN26 Yes QN61 Yes QN57 Yes Row ID      │   1│   1│   3│   3│
+│                           Layer Row ID│   1│   1│   1│   1│
+│                      ╶────────────────┼────┼────┼────┼────┤
+│                       No  Row ID      │   6│   6│   7│   7│
+│                           Layer Row ID│   4│   4│   4│   4│
+│             ╶─────────────────────────┼────┼────┼────┼────┤
+│              No  QN57 Yes Row ID      │  10│  10│  11│  11│
+│                           Layer Row ID│   6│   6│   6│   6│
+│                      ╶────────────────┼────┼────┼────┼────┤
+│                       No  Row ID      │  13│  13│  15│  15│
+│                           Layer Row ID│   7│   7│   7│   7│
+│    ╶──────────────────────────────────┼────┼────┼────┼────┤
+│     No  QN61 Yes QN57 Yes Row ID      │  17│  17│  20│  20│
+│                           Layer Row ID│   9│   9│   9│   9│
+│                      ╶────────────────┼────┼────┼────┼────┤
+│                       No  Row ID      │  21│  21│  24│  24│
+│                           Layer Row ID│  11│  11│  11│  11│
+│             ╶─────────────────────────┼────┼────┼────┼────┤
+│              No  QN57 Yes Row ID      │  25│  25│  27│  27│
+│                           Layer Row ID│  13│  13│  13│  13│
+│                      ╶────────────────┼────┼────┼────┼────┤
+│                       No  Row ID      │  30│  30│  32│  32│
+│                           Layer Row ID│  16│  16│  16│  16│
+╰───────────────────────────────────────┴────┴────┴────┴────╯
+
+                        Custom Tables
+Male
+No
+╭───────────────────────────────────────┬───────────────────╮
+│                                       │        QN27       │
+│                                       ├─────────┬─────────┤
+│                                       │   Yes   │    No   │
+│                                       ├─────────┼─────────┤
+│                                       │  QND7A  │  QND7A  │
+│                                       ├────┬────┼────┬────┤
+│                                       │ Yes│ No │ Yes│ No │
+│                                       ├────┼────┼────┼────┤
+│                                       │QN86│QN86│QN86│QN86│
+├───────────────────────────────────────┼────┼────┼────┼────┤
+│QN26 Yes QN61 Yes QN57 Yes Row ID      │   2│   2│   4│   4│
+│                           Layer Row ID│   2│   2│   2│   2│
+│                      ╶────────────────┼────┼────┼────┼────┤
+│                       No  Row ID      │   5│   5│   8│   8│
+│                           Layer Row ID│   3│   3│   3│   3│
+│             ╶─────────────────────────┼────┼────┼────┼────┤
+│              No  QN57 Yes Row ID      │   9│   9│  12│  12│
+│                           Layer Row ID│   5│   5│   5│   5│
+│                      ╶────────────────┼────┼────┼────┼────┤
+│                       No  Row ID      │  14│  14│  16│  16│
+│                           Layer Row ID│   8│   8│   8│   8│
+│    ╶──────────────────────────────────┼────┼────┼────┼────┤
+│     No  QN61 Yes QN57 Yes Row ID      │  18│  18│  19│  19│
+│                           Layer Row ID│  10│  10│  10│  10│
+│                      ╶────────────────┼────┼────┼────┼────┤
+│                       No  Row ID      │  22│  22│  23│  23│
+│                           Layer Row ID│  12│  12│  12│  12│
+│             ╶─────────────────────────┼────┼────┼────┼────┤
+│              No  QN57 Yes Row ID      │  26│  26│  28│  28│
+│                           Layer Row ID│  14│  14│  14│  14│
+│                      ╶────────────────┼────┼────┼────┼────┤
+│                       No  Row ID      │  29│  29│  31│  31│
+│                           Layer Row ID│  15│  15│  15│  15│
+╰───────────────────────────────────────┴────┴────┴────┴────╯
+
+                        Custom Tables
+Female
+Yes
+╭───────────────────────────────────────┬───────────────────╮
+│                                       │        QN27       │
+│                                       ├─────────┬─────────┤
+│                                       │   Yes   │    No   │
+│                                       ├─────────┼─────────┤
+│                                       │  QND7A  │  QND7A  │
+│                                       ├────┬────┼────┬────┤
+│                                       │ Yes│ No │ Yes│ No │
+│                                       ├────┼────┼────┼────┤
+│                                       │QN86│QN86│QN86│QN86│
+├───────────────────────────────────────┼────┼────┼────┼────┤
+│QN26 Yes QN61 Yes QN57 Yes Row ID      │  34│  34│  35│  35│
+│                           Layer Row ID│  18│  18│  18│  18│
+│                      ╶────────────────┼────┼────┼────┼────┤
+│                       No  Row ID      │  38│  38│  39│  39│
+│                           Layer Row ID│  20│  20│  20│  20│
+│             ╶─────────────────────────┼────┼────┼────┼────┤
+│              No  QN57 Yes Row ID      │  42│  42│  43│  43│
+│                           Layer Row ID│  22│  22│  22│  22│
+│                      ╶────────────────┼────┼────┼────┼────┤
+│                       No  Row ID      │  45│  45│  47│  47│
+│                           Layer Row ID│  23│  23│  23│  23│
+│    ╶──────────────────────────────────┼────┼────┼────┼────┤
+│     No  QN61 Yes QN57 Yes Row ID      │  50│  50│  51│  51│
+│                           Layer Row ID│  26│  26│  26│  26│
+│                      ╶────────────────┼────┼────┼────┼────┤
+│                       No  Row ID      │  53│  53│  55│  55│
+│                           Layer Row ID│  27│  27│  27│  27│
+│             ╶─────────────────────────┼────┼────┼────┼────┤
+│              No  QN57 Yes Row ID      │  57│  57│  59│  59│
+│                           Layer Row ID│  29│  29│  29│  29│
+│                      ╶────────────────┼────┼────┼────┼────┤
+│                       No  Row ID      │  62│  62│  64│  64│
+│                           Layer Row ID│  32│  32│  32│  32│
+╰───────────────────────────────────────┴────┴────┴────┴────╯
+
+                        Custom Tables
+Female
+No
+╭───────────────────────────────────────┬───────────────────╮
+│                                       │        QN27       │
+│                                       ├─────────┬─────────┤
+│                                       │   Yes   │    No   │
+│                                       ├─────────┼─────────┤
+│                                       │  QND7A  │  QND7A  │
+│                                       ├────┬────┼────┬────┤
+│                                       │ Yes│ No │ Yes│ No │
+│                                       ├────┼────┼────┼────┤
+│                                       │QN86│QN86│QN86│QN86│
+├───────────────────────────────────────┼────┼────┼────┼────┤
+│QN26 Yes QN61 Yes QN57 Yes Row ID      │  33│  33│  36│  36│
+│                           Layer Row ID│  17│  17│  17│  17│
+│                      ╶────────────────┼────┼────┼────┼────┤
+│                       No  Row ID      │  37│  37│  40│  40│
+│                           Layer Row ID│  19│  19│  19│  19│
+│             ╶─────────────────────────┼────┼────┼────┼────┤
+│              No  QN57 Yes Row ID      │  41│  41│  44│  44│
+│                           Layer Row ID│  21│  21│  21│  21│
+│                      ╶────────────────┼────┼────┼────┼────┤
+│                       No  Row ID      │  46│  46│  48│  48│
+│                           Layer Row ID│  24│  24│  24│  24│
+│    ╶──────────────────────────────────┼────┼────┼────┼────┤
+│     No  QN61 Yes QN57 Yes Row ID      │  49│  49│  52│  52│
+│                           Layer Row ID│  25│  25│  25│  25│
+│                      ╶────────────────┼────┼────┼────┼────┤
+│                       No  Row ID      │  54│  54│  56│  56│
+│                           Layer Row ID│  28│  28│  28│  28│
+│             ╶─────────────────────────┼────┼────┼────┼────┤
+│              No  QN57 Yes Row ID      │  58│  58│  60│  60│
+│                           Layer Row ID│  30│  30│  30│  30│
+│                      ╶────────────────┼────┼────┼────┼────┤
+│                       No  Row ID      │  61│  61│  63│  63│
+│                           Layer Row ID│  31│  31│  31│  31│
+╰───────────────────────────────────────┴────┴────┴────┴────╯
+
+                          Custom Tables
+Male
+Yes
+╭──────────────────────────────────────────┬───────────────────╮
+│                                          │        QN27       │
+│                                          ├─────────┬─────────┤
+│                                          │   Yes   │    No   │
+│                                          ├─────────┼─────────┤
+│                                          │  QND7A  │  QND7A  │
+│                                          ├────┬────┼────┬────┤
+│                                          │ Yes│ No │ Yes│ No │
+│                                          ├────┼────┼────┼────┤
+│                                          │QN86│QN86│QN86│QN86│
+├──────────────────────────────────────────┼────┼────┼────┼────┤
+│QN26 Yes QN61 Yes QN57 Yes Column ID      │   2│   4│   6│   7│
+│                           Layer Column ID│   2│   4│   6│   7│
+│                      ╶───────────────────┼────┼────┼────┼────┤
+│                       No  Column ID      │   2│   4│   6│   7│
+│                           Layer Column ID│   2│   4│   6│   7│
+│             ╶────────────────────────────┼────┼────┼────┼────┤
+│              No  QN57 Yes Column ID      │   9│  12│  13│  16│
+│                           Layer Column ID│   2│   4│   6│   7│
+│                      ╶───────────────────┼────┼────┼────┼────┤
+│                       No  Column ID      │   9│  12│  13│  16│
+│                           Layer Column ID│   2│   4│   6│   7│
+│    ╶─────────────────────────────────────┼────┼────┼────┼────┤
+│     No  QN61 Yes QN57 Yes Column ID      │  18│  19│  22│  24│
+│                           Layer Column ID│   2│   4│   6│   7│
+│                      ╶───────────────────┼────┼────┼────┼────┤
+│                       No  Column ID      │  18│  19│  22│  24│
+│                           Layer Column ID│   2│   4│   6│   7│
+│             ╶────────────────────────────┼────┼────┼────┼────┤
+│              No  QN57 Yes Column ID      │  25│  27│  29│  32│
+│                           Layer Column ID│   2│   4│   6│   7│
+│                      ╶───────────────────┼────┼────┼────┼────┤
+│                       No  Column ID      │  25│  27│  29│  32│
+│                           Layer Column ID│   2│   4│   6│   7│
+╰──────────────────────────────────────────┴────┴────┴────┴────╯
+
+                          Custom Tables
+Male
+No
+╭──────────────────────────────────────────┬───────────────────╮
+│                                          │        QN27       │
+│                                          ├─────────┬─────────┤
+│                                          │   Yes   │    No   │
+│                                          ├─────────┼─────────┤
+│                                          │  QND7A  │  QND7A  │
+│                                          ├────┬────┼────┬────┤
+│                                          │ Yes│ No │ Yes│ No │
+│                                          ├────┼────┼────┼────┤
+│                                          │QN86│QN86│QN86│QN86│
+├──────────────────────────────────────────┼────┼────┼────┼────┤
+│QN26 Yes QN61 Yes QN57 Yes Column ID      │   1│   3│   5│   8│
+│                           Layer Column ID│   1│   3│   5│   8│
+│                      ╶───────────────────┼────┼────┼────┼────┤
+│                       No  Column ID      │   1│   3│   5│   8│
+│                           Layer Column ID│   1│   3│   5│   8│
+│             ╶────────────────────────────┼────┼────┼────┼────┤
+│              No  QN57 Yes Column ID      │  10│  11│  14│  15│
+│                           Layer Column ID│   1│   3│   5│   8│
+│                      ╶───────────────────┼────┼────┼────┼────┤
+│                       No  Column ID      │  10│  11│  14│  15│
+│                           Layer Column ID│   1│   3│   5│   8│
+│    ╶─────────────────────────────────────┼────┼────┼────┼────┤
+│     No  QN61 Yes QN57 Yes Column ID      │  17│  20│  21│  23│
+│                           Layer Column ID│   1│   3│   5│   8│
+│                      ╶───────────────────┼────┼────┼────┼────┤
+│                       No  Column ID      │  17│  20│  21│  23│
+│                           Layer Column ID│   1│   3│   5│   8│
+│             ╶────────────────────────────┼────┼────┼────┼────┤
+│              No  QN57 Yes Column ID      │  26│  28│  30│  31│
+│                           Layer Column ID│   1│   3│   5│   8│
+│                      ╶───────────────────┼────┼────┼────┼────┤
+│                       No  Column ID      │  26│  28│  30│  31│
+│                           Layer Column ID│   1│   3│   5│   8│
+╰──────────────────────────────────────────┴────┴────┴────┴────╯
+
+                          Custom Tables
+Female
+Yes
+╭──────────────────────────────────────────┬───────────────────╮
+│                                          │        QN27       │
+│                                          ├─────────┬─────────┤
+│                                          │   Yes   │    No   │
+│                                          ├─────────┼─────────┤
+│                                          │  QND7A  │  QND7A  │
+│                                          ├────┬────┼────┬────┤
+│                                          │ Yes│ No │ Yes│ No │
+│                                          ├────┼────┼────┼────┤
+│                                          │QN86│QN86│QN86│QN86│
+├──────────────────────────────────────────┼────┼────┼────┼────┤
+│QN26 Yes QN61 Yes QN57 Yes Column ID      │  34│  36│  37│  40│
+│                           Layer Column ID│  10│  12│  13│  16│
+│                      ╶───────────────────┼────┼────┼────┼────┤
+│                       No  Column ID      │  34│  36│  37│  40│
+│                           Layer Column ID│  10│  12│  13│  16│
+│             ╶────────────────────────────┼────┼────┼────┼────┤
+│              No  QN57 Yes Column ID      │  41│  43│  45│  47│
+│                           Layer Column ID│  10│  12│  13│  16│
+│                      ╶───────────────────┼────┼────┼────┼────┤
+│                       No  Column ID      │  41│  43│  45│  47│
+│                           Layer Column ID│  10│  12│  13│  16│
+│    ╶─────────────────────────────────────┼────┼────┼────┼────┤
+│     No  QN61 Yes QN57 Yes Column ID      │  49│  51│  54│  55│
+│                           Layer Column ID│  10│  12│  13│  16│
+│                      ╶───────────────────┼────┼────┼────┼────┤
+│                       No  Column ID      │  49│  51│  54│  55│
+│                           Layer Column ID│  10│  12│  13│  16│
+│             ╶────────────────────────────┼────┼────┼────┼────┤
+│              No  QN57 Yes Column ID      │  58│  60│  62│  63│
+│                           Layer Column ID│  10│  12│  13│  16│
+│                      ╶───────────────────┼────┼────┼────┼────┤
+│                       No  Column ID      │  58│  60│  62│  63│
+│                           Layer Column ID│  10│  12│  13│  16│
+╰──────────────────────────────────────────┴────┴────┴────┴────╯
+
+                          Custom Tables
+Female
+No
+╭──────────────────────────────────────────┬───────────────────╮
+│                                          │        QN27       │
+│                                          ├─────────┬─────────┤
+│                                          │   Yes   │    No   │
+│                                          ├─────────┼─────────┤
+│                                          │  QND7A  │  QND7A  │
+│                                          ├────┬────┼────┬────┤
+│                                          │ Yes│ No │ Yes│ No │
+│                                          ├────┼────┼────┼────┤
+│                                          │QN86│QN86│QN86│QN86│
+├──────────────────────────────────────────┼────┼────┼────┼────┤
+│QN26 Yes QN61 Yes QN57 Yes Column ID      │  33│  35│  38│  39│
+│                           Layer Column ID│   9│  11│  14│  15│
+│                      ╶───────────────────┼────┼────┼────┼────┤
+│                       No  Column ID      │  33│  35│  38│  39│
+│                           Layer Column ID│   9│  11│  14│  15│
+│             ╶────────────────────────────┼────┼────┼────┼────┤
+│              No  QN57 Yes Column ID      │  42│  44│  46│  48│
+│                           Layer Column ID│   9│  11│  14│  15│
+│                      ╶───────────────────┼────┼────┼────┼────┤
+│                       No  Column ID      │  42│  44│  46│  48│
+│                           Layer Column ID│   9│  11│  14│  15│
+│    ╶─────────────────────────────────────┼────┼────┼────┼────┤
+│     No  QN61 Yes QN57 Yes Column ID      │  50│  52│  53│  56│
+│                           Layer Column ID│   9│  11│  14│  15│
+│                      ╶───────────────────┼────┼────┼────┼────┤
+│                       No  Column ID      │  50│  52│  53│  56│
+│                           Layer Column ID│   9│  11│  14│  15│
+│             ╶────────────────────────────┼────┼────┼────┼────┤
+│              No  QN57 Yes Column ID      │  57│  59│  61│  64│
+│                           Layer Column ID│   9│  11│  14│  15│
+│                      ╶───────────────────┼────┼────┼────┼────┤
+│                       No  Column ID      │  57│  59│  61│  64│
+│                           Layer Column ID│   9│  11│  14│  15│
+╰──────────────────────────────────────────┴────┴────┴────┴────╯
+])
+AT_CLEANUP
+
 AT_SETUP([CTABLES categorical summary functions])
 AT_CHECK([ln $top_srcdir/examples/nhtsa.sav . || cp $top_srcdir/examples/nhtsa.sav .])
 AT_DATA([ctables.sps],
@@ -2768,7 +4787,6 @@ AT_CHECK([pspp ctables.sps -O box=unicode -O width=120], [0], [dnl
 ])
 AT_CLEANUP
 
-
 AT_SETUP([CTABLES scale summary functions])
 AT_CHECK([ln $top_srcdir/examples/nhtsa.sav . || cp $top_srcdir/examples/nhtsa.sav .])
 AT_DATA([ctables.sps],
@@ -2785,191 +4803,627 @@ FREQUENCIES
 SPLIT FILE OFF.
 
 CTABLES
-    /VLABELS VARIABLE=qn19a DISPLAY=NAME /*XXX NONE yields an assertion failure
-    /TABLE region BY qn19a[VALIDN, MISSING, MEAN, SEMEAN, MEDIAN, MODE, STDDEV, VARIANCE, RANGE, MINIMUM, MAXIMUM, SUM, COUNT, TOTALN, COLPCT.SUM]
+    /VLABELS VARIABLE=qn19a DISPLAY=NONE
+    /TABLE region BY qn19a[VALIDN, MISSING, MEAN, SEMEAN, MEDIAN, MODE, STDDEV, VARIANCE, RANGE, MINIMUM, MAXIMUM, SUM, COUNT, TOTALN, ROWPCT.SUM]
     /CATEGORIES VARIABLES=qn19a TOTAL=YES MISSING=INCLUDE
-    /SLABELS POSITION=ROW.
+    /SLABELS POSITION=ROW
+    /CLABELS ROWLABELS=OPPOSITE.
 ]])
 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│
-│          Column Sum %     │   21.8%│
-│      ╶────────────────────┼────────┤
-│       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│
-│          Column Sum %     │   24.3%│
-│      ╶────────────────────┼────────┤
-│       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│
-│          Column Sum %     │   31.2%│
-│      ╶────────────────────┼────────┤
-│       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│
-│          Column Sum %     │   22.7%│
-╰───────────────────────────┴────────╯
+                   Statistics
+╭─────────┬───────────────────────────────────╮
+│         │               REGION              │
+│         ├────────┬────────┬────────┬────────┤
+│         │   NE   │   MW   │    S   │    W   │
+│         ├────────┼────────┼────────┼────────┤
+│         │  QN19A │  QN19A │  QN19A │  QN19A │
+├─────────┼────────┼────────┼────────┼────────┤
+│N Valid  │     936│    1019│    1276│     950│
+│  Missing│     473│     635│    1114│     596│
+├─────────┼────────┼────────┼────────┼────────┤
+│Mean     │   19.33│   19.83│   20.29│   19.87│
+├─────────┼────────┼────────┼────────┼────────┤
+│S.E. Mean│     .14│     .16│     .18│     .17│
+├─────────┼────────┼────────┼────────┼────────┤
+│Median   │   18.00│   19.00│   19.00│   19.00│
+├─────────┼────────┼────────┼────────┼────────┤
+│Mode     │   18.00│   18.00│   18.00│   18.00│
+├─────────┼────────┼────────┼────────┼────────┤
+│Std Dev  │    4.41│    5.15│    6.44│    5.25│
+├─────────┼────────┼────────┼────────┼────────┤
+│Variance │   19.41│   26.47│   41.43│   27.59│
+├─────────┼────────┼────────┼────────┼────────┤
+│Range    │   59.00│   71.00│   75.00│   61.00│
+├─────────┼────────┼────────┼────────┼────────┤
+│Minimum  │     .00│    4.00│    4.00│    4.00│
+├─────────┼────────┼────────┼────────┼────────┤
+│Maximum  │   59.00│   75.00│   79.00│   65.00│
+├─────────┼────────┼────────┼────────┼────────┤
+│Sum      │18092.00│20206.00│25886.00│18877.00│
+╰─────────┴────────┴────────┴────────┴────────╯
+
+                         Custom Tables
+╭────────────────────────┬────────┬────────┬────────┬────────╮
+│                        │   NE   │   MW   │    S   │    W   │
+├────────────────────────┼────────┼────────┼────────┼────────┤
+│REGION Valid N          │     936│    1019│    1276│     950│
+│       Missing          │  473.00│  635.00│ 1114.00│  596.00│
+│       Mean             │   19.33│   19.83│   20.29│   19.87│
+│       Std Error of Mean│     .14│     .16│     .18│     .17│
+│       Median           │   18.00│   19.00│   19.00│   19.00│
+│       Mode             │   18.00│   18.00│   18.00│   18.00│
+│       Std Deviation    │    4.41│    5.15│    6.44│    5.25│
+│       Variance         │   19.41│   26.47│   41.43│   27.59│
+│       Range            │   59.00│   71.00│   75.00│   61.00│
+│       Minimum          │     .00│    4.00│    4.00│    4.00│
+│       Maximum          │   59.00│   75.00│   79.00│   65.00│
+│       Sum              │18092.00│20206.00│25886.00│18877.00│
+│       Count            │    1409│    1654│    2390│    1546│
+│       Total N          │    1409│    1654│    2390│    1546│
+│       Row Sum %        │   21.8%│   24.3%│   31.2%│   22.7%│
+╰────────────────────────┴────────┴────────┴────────┴────────╯
 ])
 AT_CLEANUP
 
+AT_SETUP([CTABLES scale summary functions - weighting])
+weight=1
+c=10
+for a in 1 2 9; do
+    for b in 3 4 9; do
+        for n in 1 2 3 4 5 6 7 8 9 10; do
+           if test $c -lt 15; then
+               cval=.
+           else
+               cval=$c
+           fi
+           printf "$weight $a $b $cval\n"
+           weight=$(expr \( $weight + 3 \) % 7 + 2)
+           c=$(expr \( $c + 13 \) % 29 + 7)
+        done
+    done
+done > ctables.txt
+
+AT_DATA([analysis.sps],
+[[* Use SPLIT FILE with FREQUENCIES to generate output equivalent to
+  CTABLES later, to make the results easier to verify.
+SPLIT FILE BY a b.
+FREQUENCIES
+    c
+    /STATISTICS=MEAN SEMEAN MEDIAN MODE STDDEV VARIANCE RANGE MINIMUM MAXIMUM SUM
+    /FORMAT NOTABLE /MISSING=INCLUDE.
+SPLIT FILE OFF.
+
+CTABLES
+    /TABLE c[VALIDN, MISSING, MEAN F8.2, SEMEAN F8.2, MEDIAN F8.2, MODE, STDDEV F8.2, VARIANCE F8.2, RANGE F8.2, MINIMUM, MAXIMUM, SUM F8.2, COUNT, TOTALN, LAYERROWPCT.SUM] BY a>b
+    /SLABELS POSITION=ROW
+    /CATEGORIES VARIABLES=a b MISSING=INCLUDE.
+]])
 
-AT_SETUP([CTABLES scale summary functions - assertion failure])
+AT_DATA([ctables.sps],
+[[DATA LIST LIST NOTABLE FILE='ctables.txt'
+    /w (F5.0) a b c (f2.0).
+VAR LEVEL w c (SCALE) a b (NOMINAL).
+MISSING VALUES a b (9).
+
+INCLUDE 'analysis.sps'.
+
+WEIGHT BY w.
+INCLUDE 'analysis.sps'.
+
+* Same as original analysis using unweighted versions of summaries.
+CTABLES
+    /TABLE c[UVALIDN, UMISSING, UMEAN F8.2, USEMEAN F8.2, UMEDIAN F8.2, UMODE, USTDDEV F8.2, UVARIANCE F8.2, USUM F8.2, UCOUNT, UTOTALN, ULAYERROWPCT.SUM] BY a>b
+    /SLABELS POSITION=ROW
+    /CATEGORIES VARIABLES=a b MISSING=INCLUDE.
+]])
+AT_CHECK([pspp ctables.sps -O box=unicode -O width=120], [0], [dnl
+                                Statistics
+╭─────────┬──────────────────────────────────────────────────────────────╮
+│         │                               a                              │
+│         ├────────────────────┬────────────────────┬────────────────────┤
+│         │          1         │          2         │          9         │
+│         ├────────────────────┼────────────────────┼────────────────────┤
+│         │          b         │          b         │          b         │
+│         ├──────┬──────┬──────┼──────┬──────┬──────┼──────┬──────┬──────┤
+│         │   3  │   4  │   9  │   3  │   4  │   9  │   3  │   4  │   9  │
+│         ├──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┤
+│         │   c  │   c  │   c  │   c  │   c  │   c  │   c  │   c  │   c  │
+├─────────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┤
+│N Valid  │     7│     6│     8│     7│     7│     8│     7│     7│     8│
+│  Missing│     3│     4│     2│     3│     3│     2│     3│     3│     2│
+├─────────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┤
+│Mean     │ 25.86│ 24.50│ 24.63│ 25.86│ 25.71│ 24.25│ 25.43│ 25.29│ 23.88│
+├─────────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┤
+│S.E. Mean│  2.44│  2.14│  2.58│  2.44│  2.18│  2.43│  2.36│  2.18│  2.47│
+├─────────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┤
+│Median   │ 25.00│ 24.50│ 25.00│ 25.00│ 27.00│ 25.00│ 25.00│ 24.00│ 23.50│
+├─────────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┤
+│Mode     │    16│    18│    15│    16│    18│    15│    16│    18│    15│
+├─────────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┤
+│Std Dev  │  6.47│  5.24│  7.31│  6.47│  5.77│  6.88│  6.24│  5.77│  6.98│
+├─────────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┤
+│Variance │ 41.81│ 27.50│ 53.41│ 41.81│ 33.24│ 47.36│ 38.95│ 33.24│ 48.70│
+├─────────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┤
+│Range    │ 18.00│ 13.00│ 20.00│ 18.00│ 15.00│ 20.00│ 18.00│ 15.00│ 20.00│
+├─────────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┤
+│Minimum  │    16│    18│    15│    16│    18│    15│    16│    18│    15│
+├─────────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┤
+│Maximum  │    34│    31│    35│    34│    33│    35│    34│    33│    35│
+├─────────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┤
+│Sum      │181.00│147.00│197.00│181.00│180.00│194.00│178.00│177.00│191.00│
+╰─────────┴──────┴──────┴──────┴──────┴──────┴──────┴──────┴──────┴──────╯
+
+                                    Custom Tables
+╭───────────────────┬──────────────────────────────────────────────────────────────╮
+│                   │                               a                              │
+│                   ├────────────────────┬────────────────────┬────────────────────┤
+│                   │          1         │          2         │          9         │
+│                   ├────────────────────┼────────────────────┼────────────────────┤
+│                   │          b         │          b         │          b         │
+│                   ├──────┬──────┬──────┼──────┬──────┬──────┼──────┬──────┬──────┤
+│                   │   3  │   4  │   9  │   3  │   4  │   9  │   3  │   4  │   9  │
+├───────────────────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┤
+│c Valid N          │     7│     6│     8│     7│     7│     8│     7│     7│     8│
+│  Missing          │     3│     4│     2│     3│     3│     2│     3│     3│     2│
+│  Mean             │ 25.86│ 24.50│ 24.63│ 25.86│ 25.71│ 24.25│ 25.43│ 25.29│ 23.88│
+│  Std Error of Mean│  2.44│  2.14│  2.58│  2.44│  2.18│  2.43│  2.36│  2.18│  2.47│
+│  Median           │ 25.00│ 24.50│ 25.00│ 25.00│ 27.00│ 25.00│ 25.00│ 24.00│ 23.50│
+│  Mode             │    16│    18│    15│    16│    18│    15│    16│    18│    15│
+│  Std Deviation    │  6.47│  5.24│  7.31│  6.47│  5.77│  6.88│  6.24│  5.77│  6.98│
+│  Variance         │ 41.81│ 27.50│ 53.41│ 41.81│ 33.24│ 47.36│ 38.95│ 33.24│ 48.70│
+│  Range            │ 18.00│ 13.00│ 20.00│ 18.00│ 15.00│ 20.00│ 18.00│ 15.00│ 20.00│
+│  Minimum          │    16│    18│    15│    16│    18│    15│    16│    18│    15│
+│  Maximum          │    34│    31│    35│    34│    33│    35│    34│    33│    35│
+│  Sum              │181.00│147.00│197.00│181.00│180.00│194.00│178.00│177.00│191.00│
+│  Count            │    10│    10│    10│    10│    10│    10│    10│    10│    10│
+│  Total N          │    10│    10│    10│    10│    10│    10│    10│    10│    10│
+│  Layer Row Sum %  │ 26.3%│ 21.3%│     .│ 26.3%│ 26.1%│     .│     .│     .│     .│
+╰───────────────────┴──────┴──────┴──────┴──────┴──────┴──────┴──────┴──────┴──────╯
+
+                                  Statistics
+╭─────────┬─────────────────────────────────────────────────────────────────╮
+│         │                                a                                │
+│         ├─────────────────────┬─────────────────────┬─────────────────────┤
+│         │          1          │          2          │          9          │
+│         ├─────────────────────┼─────────────────────┼─────────────────────┤
+│         │          b          │          b          │          b          │
+│         ├───────┬──────┬──────┼──────┬───────┬──────┼──────┬──────┬───────┤
+│         │   3   │   4  │   9  │   3  │   4   │   9  │   3  │   4  │   9   │
+│         ├───────┼──────┼──────┼──────┼───────┼──────┼──────┼──────┼───────┤
+│         │   c   │   c  │   c  │   c  │   c   │   c  │   c  │   c  │   c   │
+├─────────┼───────┼──────┼──────┼──────┼───────┼──────┼──────┼──────┼───────┤
+│N Valid  │     40│    35│    41│    26│     38│    40│    34│    32│     39│
+│  Missing│      6│    14│    11│    22│     13│     7│    16│    21│     10│
+├─────────┼───────┼──────┼──────┼──────┼───────┼──────┼──────┼──────┼───────┤
+│Mean     │  27.23│ 24.20│ 22.63│ 27.96│  27.21│ 23.48│ 23.71│ 25.47│  26.03│
+├─────────┼───────┼──────┼──────┼──────┼───────┼──────┼──────┼──────┼───────┤
+│S.E. Mean│    .93│   .75│  1.03│  1.12│    .84│   .87│  1.01│  1.05│   1.01│
+├─────────┼───────┼──────┼──────┼──────┼───────┼──────┼──────┼──────┼───────┤
+│Median   │  30.00│ 22.00│ 19.00│ 30.00│  29.00│ 24.00│ 23.00│ 24.00│  28.00│
+├─────────┼───────┼──────┼──────┼──────┼───────┼──────┼──────┼──────┼───────┤
+│Mode     │     34│    29│    19│    34│     33│    28│    23│    18│     30│
+├─────────┼───────┼──────┼──────┼──────┼───────┼──────┼──────┼──────┼───────┤
+│Std Dev  │   5.89│  4.42│  6.59│  5.69│   5.16│  5.50│  5.87│  5.94│   6.30│
+├─────────┼───────┼──────┼──────┼──────┼───────┼──────┼──────┼──────┼───────┤
+│Variance │  34.64│ 19.52│ 43.39│ 32.36│  26.66│ 30.20│ 34.46│ 35.29│  39.71│
+├─────────┼───────┼──────┼──────┼──────┼───────┼──────┼──────┼──────┼───────┤
+│Range    │  18.00│ 13.00│ 20.00│ 18.00│  15.00│ 20.00│ 18.00│ 15.00│  20.00│
+├─────────┼───────┼──────┼──────┼──────┼───────┼──────┼──────┼──────┼───────┤
+│Minimum  │     16│    18│    15│    16│     18│    15│    16│    18│     15│
+├─────────┼───────┼──────┼──────┼──────┼───────┼──────┼──────┼──────┼───────┤
+│Maximum  │     34│    31│    35│    34│     33│    35│    34│    33│     35│
+├─────────┼───────┼──────┼──────┼──────┼───────┼──────┼──────┼──────┼───────┤
+│Sum      │1089.00│847.00│928.00│727.00│1034.00│939.00│806.00│815.00│1015.00│
+╰─────────┴───────┴──────┴──────┴──────┴───────┴──────┴──────┴──────┴───────╯
+
+                                     Custom Tables
+╭───────────────────┬─────────────────────────────────────────────────────────────────╮
+│                   │                                a                                │
+│                   ├─────────────────────┬─────────────────────┬─────────────────────┤
+│                   │          1          │          2          │          9          │
+│                   ├─────────────────────┼─────────────────────┼─────────────────────┤
+│                   │          b          │          b          │          b          │
+│                   ├───────┬──────┬──────┼──────┬───────┬──────┼──────┬──────┬───────┤
+│                   │   3   │   4  │   9  │   3  │   4   │   9  │   3  │   4  │   9   │
+├───────────────────┼───────┼──────┼──────┼──────┼───────┼──────┼──────┼──────┼───────┤
+│c Valid N          │     40│    35│    41│    26│     38│    40│    34│    32│     39│
+│  Missing          │      6│    14│    11│    22│     13│     7│    16│    21│     10│
+│  Mean             │  27.22│ 24.20│ 22.63│ 27.96│  27.21│ 23.48│ 23.71│ 25.47│  26.03│
+│  Std Error of Mean│    .93│   .75│  1.03│  1.12│    .84│   .87│  1.01│  1.05│   1.01│
+│  Median           │  30.00│ 22.00│ 19.00│ 30.00│  29.00│ 24.00│ 23.00│ 24.00│  28.00│
+│  Mode             │     34│    29│    19│    34│     33│    28│    23│    18│     30│
+│  Std Deviation    │   5.89│  4.42│  6.59│  5.69│   5.16│  5.50│  5.87│  5.94│   6.30│
+│  Variance         │  34.64│ 19.52│ 43.39│ 32.36│  26.66│ 30.20│ 34.46│ 35.29│  39.71│
+│  Range            │  18.00│ 13.00│ 20.00│ 18.00│  15.00│ 20.00│ 18.00│ 15.00│  20.00│
+│  Minimum          │     16│    18│    15│    16│     18│    15│    16│    18│     15│
+│  Maximum          │     34│    31│    35│    34│     33│    35│    34│    33│     35│
+│  Sum              │1089.00│847.00│928.00│727.00│1034.00│939.00│806.00│815.00│1015.00│
+│  Count            │     46│    49│    52│    48│     51│    47│    50│    53│     49│
+│  Total N          │     46│    49│    52│    48│     51│    47│    50│    53│     49│
+│  Layer Row Sum %  │  29.5%│ 22.9%│     .│ 19.7%│  28.0%│     .│     .│     .│      .│
+╰───────────────────┴───────┴──────┴──────┴──────┴───────┴──────┴──────┴──────┴───────╯
+
+                                        Custom Tables
+╭────────────────────────────┬──────────────────────────────────────────────────────────────╮
+│                            │                               a                              │
+│                            ├────────────────────┬────────────────────┬────────────────────┤
+│                            │          1         │          2         │          9         │
+│                            ├────────────────────┼────────────────────┼────────────────────┤
+│                            │          b         │          b         │          b         │
+│                            ├──────┬──────┬──────┼──────┬──────┬──────┼──────┬──────┬──────┤
+│                            │   3  │   4  │   9  │   3  │   4  │   9  │   3  │   4  │   9  │
+├────────────────────────────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┤
+│c Valid N                   │     7│     6│     8│     7│     7│     8│     7│     7│     8│
+│  Missing                   │     3│     4│     2│     3│     3│     2│     3│     3│     2│
+│  Unweighted Mean           │ 25.86│ 24.50│ 24.63│ 25.86│ 25.71│ 24.25│ 25.43│ 25.29│ 23.88│
+│  Std Error of Mean         │  2.44│  2.14│  2.58│  2.44│  2.18│  2.43│  2.36│  2.18│  2.47│
+│  Median                    │ 25.00│ 24.50│ 25.00│ 25.00│ 27.00│ 25.00│ 25.00│ 24.00│ 23.50│
+│  Mode                      │    16│    18│    15│    16│    18│    15│    16│    18│    15│
+│  Std Deviation             │  6.47│  5.24│  7.31│  6.47│  5.77│  6.88│  6.24│  5.77│  6.98│
+│  Variance                  │ 41.81│ 27.50│ 53.41│ 41.81│ 33.24│ 47.36│ 38.95│ 33.24│ 48.70│
+│  Sum                       │181.00│147.00│197.00│181.00│180.00│194.00│178.00│177.00│191.00│
+│  Unweighted Count          │    10│    10│    10│    10│    10│    10│    10│    10│    10│
+│  Total N                   │    10│    10│    10│    10│    10│    10│    10│    10│    10│
+│  Unweighted Layer Row Sum %│ 26.3%│ 21.3%│     .│ 26.3%│ 26.1%│     .│     .│     .│     .│
+╰────────────────────────────┴──────┴──────┴──────┴──────┴──────┴──────┴──────┴──────┴──────╯
+])
+AT_CLEANUP
+
+AT_SETUP([CTABLES hidden scale VLABELS])
 AT_CHECK([ln $top_srcdir/examples/nhtsa.sav . || cp $top_srcdir/examples/nhtsa.sav .])
 AT_DATA([ctables.sps],
 [[GET 'nhtsa.sav'.
+CTABLES
+    /TABLE region BY qn19a + qn35
+    /SLABELS POSITION=ROW.
 CTABLES
     /VLABELS VARIABLE=qn19a DISPLAY=NONE
-    /TABLE region BY qn19a
-    /CATEGORIES VARIABLES=qn19a TOTAL=YES MISSING=INCLUDE
+    /TABLE region BY qn19a + qn35
+    /SLABELS POSITION=ROW.
+CTABLES
+    /VLABELS VARIABLE=qn35 DISPLAY=NONE
+    /TABLE region BY qn19a + qn35
+    /SLABELS POSITION=ROW.
+
+* This one in particular caused a crash because no categories were
+  created on the column axis, so passing in 0 for the index was still
+  too big for that number of categories.  It was fixed by creating a
+  name-only category for each variable despite the "NONE" request,
+  then hiding the entire dimension's labels if all its labels were
+  set to "NONE".
+CTABLES
+    /VLABELS VARIABLE=qn19a qn35 DISPLAY=NONE
+    /TABLE region BY qn19a + qn35
     /SLABELS POSITION=ROW.
 ]])
-AT_CHECK([pspp ctables.sps -O box=unicode -O width=120], [0], [])
+AT_CHECK([pspp ctables.sps -O box=unicode], [0], [dnl
+                                 Custom Tables
+╭──────────────┬────────────────────────────┬─────────────────────────────────╮
+│              │ 19a. About how old were you│ 35. In the past thirty days, how│
+│              │   when you first starting  │   many times have you driven a  │
+│              │    drinking alcohol, not   │  motor vehicle WITHIN TWO HOURS │
+│              │  counting small tastes or  │     AFTER drinking alcoholic    │
+│              │      sips of alcohol.      │            beverages?           │
+├──────────────┼────────────────────────────┼─────────────────────────────────┤
+│Region NE Mean│                       19.33│                                2│
+│      ╶───────┼────────────────────────────┼─────────────────────────────────┤
+│       MW Mean│                       19.83│                                2│
+│      ╶───────┼────────────────────────────┼─────────────────────────────────┤
+│       S  Mean│                       20.29│                                2│
+│      ╶───────┼────────────────────────────┼─────────────────────────────────┤
+│       W  Mean│                       19.87│                                2│
+╰──────────────┴────────────────────────────┴─────────────────────────────────╯
+
+                                 Custom Tables
+╭──────────────┬─────┬────────────────────────────────────────────────────────╮
+│              │     │  35. In the past thirty days, how many times have you  │
+│              │     │ driven a motor vehicle WITHIN TWO HOURS AFTER drinking │
+│              │QN19A│                  alcoholic beverages?                  │
+├──────────────┼─────┼────────────────────────────────────────────────────────┤
+│Region NE Mean│19.33│                                                       2│
+│      ╶───────┼─────┼────────────────────────────────────────────────────────┤
+│       MW Mean│19.83│                                                       2│
+│      ╶───────┼─────┼────────────────────────────────────────────────────────┤
+│       S  Mean│20.29│                                                       2│
+│      ╶───────┼─────┼────────────────────────────────────────────────────────┤
+│       W  Mean│19.87│                                                       2│
+╰──────────────┴─────┴────────────────────────────────────────────────────────╯
+
+                                 Custom Tables
+╭──────────────┬─────────────────────────────────────────────────────────┬────╮
+│              │   19a. About how old were you when you first starting   │    │
+│              │  drinking alcohol, not counting small tastes or sips of │    │
+│              │                         alcohol.                        │qn35│
+├──────────────┼─────────────────────────────────────────────────────────┼────┤
+│Region NE Mean│                                                    19.33│   2│
+│      ╶───────┼─────────────────────────────────────────────────────────┼────┤
+│       MW Mean│                                                    19.83│   2│
+│      ╶───────┼─────────────────────────────────────────────────────────┼────┤
+│       S  Mean│                                                    20.29│   2│
+│      ╶───────┼─────────────────────────────────────────────────────────┼────┤
+│       W  Mean│                                                    19.87│   2│
+╰──────────────┴─────────────────────────────────────────────────────────┴────╯
+
+      Custom Tables
+╭──────────────┬───────╮
+│Region NE Mean│19.33 2│
+│      ╶───────┼───────┤
+│       MW Mean│19.83 2│
+│      ╶───────┼───────┤
+│       S  Mean│20.29 2│
+│      ╶───────┼───────┤
+│       W  Mean│19.87 2│
+╰──────────────┴───────╯
+])
+AT_CLEANUP
+
+AT_SETUP([CTABLES with SPLIT FILE])
+AT_CHECK([ln $top_srcdir/examples/nhtsa.sav . || cp $top_srcdir/examples/nhtsa.sav .])
+AT_DATA([ctables.sps],
+[[GET 'nhtsa.sav'.
+
+SORT CASES BY qns3a.
+
+CTABLES /TABLE qn105ba.
+
+* Layered split has no effect on output.
+SPLIT FILE BY qns3a.
+CTABLES /TABLE qn105ba.
+
+* Add column variable qns3a to compare against separate splits.
+CTABLES /TABLE qn105ba BY qns3a.
+
+* Separate splits are truly output separately.
+SPLIT FILE SEPARATE BY qns3a.
+CTABLES /TABLE qn105ba.
+]])
+AT_CHECK([pspp ctables.sps -O box=unicode -O width=80], [0], [dnl
+                                  Custom Tables
+╭────────────────────────────────────────────────────────────────────────┬─────╮
+│                                                                        │Count│
+├────────────────────────────────────────────────────────────────────────┼─────┤
+│105b. How likely is it that drivers who have had too much   Almost      │  700│
+│to drink to drive safely will A. Get stopped by the police? certain     │     │
+│                                                            Very likely │ 1502│
+│                                                            Somewhat    │ 2763│
+│                                                            likely      │     │
+│                                                            Somewhat    │ 1307│
+│                                                            unlikely    │     │
+│                                                            Very        │  609│
+│                                                            unlikely    │     │
+╰────────────────────────────────────────────────────────────────────────┴─────╯
+
+                                  Custom Tables
+╭────────────────────────────────────────────────────────────────────────┬─────╮
+│                                                                        │Count│
+├────────────────────────────────────────────────────────────────────────┼─────┤
+│105b. How likely is it that drivers who have had too much   Almost      │  700│
+│to drink to drive safely will A. Get stopped by the police? certain     │     │
+│                                                            Very likely │ 1502│
+│                                                            Somewhat    │ 2763│
+│                                                            likely      │     │
+│                                                            Somewhat    │ 1307│
+│                                                            unlikely    │     │
+│                                                            Very        │  609│
+│                                                            unlikely    │     │
+╰────────────────────────────────────────────────────────────────────────┴─────╯
+
+                                  Custom Tables
+╭─────────────────────────────────────────────────────────────────┬────────────╮
+│                                                                 │S3a. GENDER:│
+│                                                                 ├─────┬──────┤
+│                                                                 │ Male│Female│
+│                                                                 ├─────┼──────┤
+│                                                                 │Count│ Count│
+├─────────────────────────────────────────────────────────────────┼─────┼──────┤
+│105b. How likely is it that drivers who have had too Almost      │  297│   403│
+│much to drink to drive safely will A. Get stopped by certain     │     │      │
+│the police?                                          Very likely │  660│   842│
+│                                                     Somewhat    │ 1174│  1589│
+│                                                     likely      │     │      │
+│                                                     Somewhat    │  640│   667│
+│                                                     unlikely    │     │      │
+│                                                     Very        │  311│   298│
+│                                                     unlikely    │     │      │
+╰─────────────────────────────────────────────────────────────────┴─────┴──────╯
+
+    Split Values
+╭────────────┬─────╮
+│Variable    │Value│
+├────────────┼─────┤
+│S3a. GENDER:│Male │
+╰────────────┴─────╯
+
+                                  Custom Tables
+╭────────────────────────────────────────────────────────────────────────┬─────╮
+│                                                                        │Count│
+├────────────────────────────────────────────────────────────────────────┼─────┤
+│105b. How likely is it that drivers who have had too much   Almost      │  297│
+│to drink to drive safely will A. Get stopped by the police? certain     │     │
+│                                                            Very likely │  660│
+│                                                            Somewhat    │ 1174│
+│                                                            likely      │     │
+│                                                            Somewhat    │  640│
+│                                                            unlikely    │     │
+│                                                            Very        │  311│
+│                                                            unlikely    │     │
+╰────────────────────────────────────────────────────────────────────────┴─────╯
+
+     Split Values
+╭────────────┬──────╮
+│Variable    │ Value│
+├────────────┼──────┤
+│S3a. GENDER:│Female│
+╰────────────┴──────╯
+
+                                  Custom Tables
+╭────────────────────────────────────────────────────────────────────────┬─────╮
+│                                                                        │Count│
+├────────────────────────────────────────────────────────────────────────┼─────┤
+│105b. How likely is it that drivers who have had too much   Almost      │  403│
+│to drink to drive safely will A. Get stopped by the police? certain     │     │
+│                                                            Very likely │  842│
+│                                                            Somewhat    │ 1589│
+│                                                            likely      │     │
+│                                                            Somewhat    │  667│
+│                                                            unlikely    │     │
+│                                                            Very        │  298│
+│                                                            unlikely    │     │
+╰────────────────────────────────────────────────────────────────────────┴─────╯
+])
 AT_CLEANUP
 
+AT_SETUP([CTABLES variable level inference])
+AT_DATA([data.txt], [dnl
+dnl n1 has 10 unique small values -> nominal.
+dnl n2 has 23 unique small values -> nominal.
+dnl n3 is all missing -> nominal.
+dnl s1 has 24 unique small values -> scale.
+dnl s2 has one negative value -> scale.
+dnl s3 has one non-integer value -> scale.
+dnl s4 has no valid values less than 10 -> scale.
+dnl s5 has no valid values less than 10,000 -> scale.
+1  1  . 1  1  1    10 10001
+2  2  . 2  2  2    11 10002
+3  3  . 3  3  3    12 10003
+4  4  . 4  4  4    13 10004
+5  5  . 5  5  5    14 10005
+6  6  . 6  6  6    15 10006
+7  7  . 7  7  7    16 10007
+8  8  . 8  8  8    17 10008
+9  9  . 9  9  9    18 10009
+10 10 . 10 10 10.5 19 110000
+1  11 . 11 -1 1    11 10001
+2  12 . 12 2  2    12 10002
+3  13 . 13 3  3    13 10003
+4  14 . 14 4  4    14 10004
+5  15 . 15 5  5    15 10005
+6  16 . 16 6  6    16 10006
+7  17 . 17 7  7    17 10007
+8  18 . 18 8  8    18 10008
+9  19 . 19 9  9    19 10009
+1  20 . 20 1  1    20 10001
+2  21 . 21 2  2    21 10002
+3  22 . 22 3  3    22 10003
+4  23 . 23 4  4    23 10004
+5  23 . 24 5  5    24 10005
+6  23 . 24 6  6    25 10006
+])
+
+AT_DATA([ctables.sps], [dnl
+DATA LIST LIST file='data.txt' NOTABLE /n1 to n3 s1 to s5.
+
+* Nominal formats (copied from data that will default to scale).
+COMPUTE n4=s1.
+COMPUTE n5=s1.
+FORMATS n4(WKDAY5) n5(MONTH5).
+
+* Scale formats (copied from data that will default to nominal).
+COMPUTE s6=n1.
+COMPUTE s7=n1.
+COMPUTE s8=n1.
+FORMATS s6(DOLLAR6.2) s7(CCA8.2) s8(DATETIME17).
+
+STRING string(A8).
+
+DISPLAY DICTIONARY.
+CTABLES /TABLE n1 + n2 + n3 + string + s1 + s2 + s3 + s4 + s5.
+DISPLAY DICTIONARY.
+])
+
+AT_CHECK([pspp ctables.sps -O box=unicode -O width=80], [0], [dnl
+                                    Variables
+╭──────┬────────┬──────────────┬─────┬─────┬─────────┬────────────┬────────────╮
+│      │        │  Measurement │     │     │         │            │            │
+│Name  │Position│     Level    │ Role│Width│Alignment│Print Format│Write Format│
+├──────┼────────┼──────────────┼─────┼─────┼─────────┼────────────┼────────────┤
+│n1    │       1│Unknown       │Input│    8│Right    │F8.2        │F8.2        │
+│n2    │       2│Unknown       │Input│    8│Right    │F8.2        │F8.2        │
+│n3    │       3│Unknown       │Input│    8│Right    │F8.2        │F8.2        │
+│s1    │       4│Unknown       │Input│    8│Right    │F8.2        │F8.2        │
+│s2    │       5│Unknown       │Input│    8│Right    │F8.2        │F8.2        │
+│s3    │       6│Unknown       │Input│    8│Right    │F8.2        │F8.2        │
+│s4    │       7│Unknown       │Input│    8│Right    │F8.2        │F8.2        │
+│s5    │       8│Unknown       │Input│    8│Right    │F8.2        │F8.2        │
+│n4    │       9│Unknown       │Input│    8│Right    │WKDAY5      │WKDAY5      │
+│n5    │      10│Unknown       │Input│    8│Right    │MONTH5      │MONTH5      │
+│s6    │      11│Unknown       │Input│    8│Right    │DOLLAR6.2   │DOLLAR6.2   │
+│s7    │      12│Unknown       │Input│    8│Right    │CCA8.2      │CCA8.2      │
+│s8    │      13│Unknown       │Input│    8│Right    │DATETIME17.0│DATETIME17.0│
+│string│      14│Nominal       │Input│    8│Left     │A8          │A8          │
+╰──────┴────────┴──────────────┴─────┴─────┴─────────┴────────────┴────────────╯
+
+        Custom Tables
+╭────────────┬─────┬────────╮
+│            │Count│  Mean  │
+├────────────┼─────┼────────┤
+│n1     1.00 │    3│        │
+│       2.00 │    3│        │
+│       3.00 │    3│        │
+│       4.00 │    3│        │
+│       5.00 │    3│        │
+│       6.00 │    3│        │
+│       7.00 │    2│        │
+│       8.00 │    2│        │
+│       9.00 │    2│        │
+│       10.00│    1│        │
+├────────────┼─────┼────────┤
+│n2     1.00 │    1│        │
+│       2.00 │    1│        │
+│       3.00 │    1│        │
+│       4.00 │    1│        │
+│       5.00 │    1│        │
+│       6.00 │    1│        │
+│       7.00 │    1│        │
+│       8.00 │    1│        │
+│       9.00 │    1│        │
+│       10.00│    1│        │
+│       11.00│    1│        │
+│       12.00│    1│        │
+│       13.00│    1│        │
+│       14.00│    1│        │
+│       15.00│    1│        │
+│       16.00│    1│        │
+│       17.00│    1│        │
+│       18.00│    1│        │
+│       19.00│    1│        │
+│       20.00│    1│        │
+│       21.00│    1│        │
+│       22.00│    1│        │
+│       23.00│    3│        │
+├────────────┼─────┼────────┤
+│string      │   25│        │
+├────────────┼─────┼────────┤
+│s1          │     │   12.96│
+├────────────┼─────┼────────┤
+│s2          │     │    4.76│
+├────────────┼─────┼────────┤
+│s3          │     │    4.86│
+├────────────┼─────┼────────┤
+│s4          │     │   16.60│
+├────────────┼─────┼────────┤
+│s5          │     │14004.44│
+╰────────────┴─────┴────────╯
+
+                                    Variables
+╭──────┬────────┬──────────────┬─────┬─────┬─────────┬────────────┬────────────╮
+│      │        │  Measurement │     │     │         │            │            │
+│Name  │Position│     Level    │ Role│Width│Alignment│Print Format│Write Format│
+├──────┼────────┼──────────────┼─────┼─────┼─────────┼────────────┼────────────┤
+│n1    │       1│Nominal       │Input│    8│Right    │F8.2        │F8.2        │
+│n2    │       2│Nominal       │Input│    8│Right    │F8.2        │F8.2        │
+│n3    │       3│Nominal       │Input│    8│Right    │F8.2        │F8.2        │
+│s1    │       4│Scale         │Input│    8│Right    │F8.2        │F8.2        │
+│s2    │       5│Scale         │Input│    8│Right    │F8.2        │F8.2        │
+│s3    │       6│Scale         │Input│    8│Right    │F8.2        │F8.2        │
+│s4    │       7│Scale         │Input│    8│Right    │F8.2        │F8.2        │
+│s5    │       8│Scale         │Input│    8│Right    │F8.2        │F8.2        │
+│n4    │       9│Nominal       │Input│    8│Right    │WKDAY5      │WKDAY5      │
+│n5    │      10│Nominal       │Input│    8│Right    │MONTH5      │MONTH5      │
+│s6    │      11│Scale         │Input│    8│Right    │DOLLAR6.2   │DOLLAR6.2   │
+│s7    │      12│Scale         │Input│    8│Right    │CCA8.2      │CCA8.2      │
+│s8    │      13│Scale         │Input│    8│Right    │DATETIME17.0│DATETIME17.0│
+│string│      14│Nominal       │Input│    8│Left     │A8          │A8          │
+╰──────┴────────┴──────────────┴─────┴─────┴─────────┴────────────┴────────────╯
+])
+AT_CLEANUP