From c8adc6783134063d4ada34a58f9e7abf6a039bb2 Mon Sep 17 00:00:00 2001 From: Ben Pfaff Date: Sat, 13 Aug 2022 16:43:23 -0700 Subject: [PATCH] progress on ROWLABELS=LAYER --- src/language/stats/ctables.c | 29 ++++ tests/language/stats/ctables.at | 268 ++++++++++++++++++++++++++++++++ 2 files changed, 297 insertions(+) diff --git a/src/language/stats/ctables.c b/src/language/stats/ctables.c index 2a970ed19a..e5a1ca5b19 100644 --- a/src/language/stats/ctables.c +++ b/src/language/stats/ctables.c @@ -4698,6 +4698,17 @@ ctables_prepare_table (struct ctables_table *t) break; } } + else if (at == CTAT_LAYER && t->label_axis[a] == PIVOT_AXIS_LAYER) + { + for (size_t k = nest->n - 1; k < nest->n; k--) + { + if (k == nest->scale_idx) + continue; + nest->areas[at][nest->n_areas[at]++] = k; + break; + } + continue; + } if (at == CTAT_SUBTABLE && t->label_axis[PIVOT_AXIS_ROW] == PIVOT_AXIS_COLUMN) { @@ -4709,6 +4720,24 @@ ctables_prepare_table (struct ctables_table *t) nest->n_areas[at]--; continue; } + else if (at == CTAT_SUBTABLE && t->label_axis[PIVOT_AXIS_ROW] == PIVOT_AXIS_LAYER) + { + if (a == PIVOT_AXIS_ROW) + { + size_t n = nest->n_areas[at]; + if (n > 1) + { + nest->areas[at][n - 2] = nest->areas[at][n - 1]; + nest->n_areas[at]--; + } + } + else if (a == PIVOT_AXIS_COLUMN) + { + if (nest->n_areas[at] > 0) + nest->n_areas[at]--; + } + continue; + } else if (at == CTAT_SUBTABLE && t->label_axis[PIVOT_AXIS_COLUMN] == PIVOT_AXIS_ROW) { size_t n_drop = (a == PIVOT_AXIS_LAYER ? 0 diff --git a/tests/language/stats/ctables.at b/tests/language/stats/ctables.at index 5261ff472a..9c9cc3e1cc 100644 --- a/tests/language/stats/ctables.at +++ b/tests/language/stats/ctables.at @@ -3820,6 +3820,274 @@ Female ]) 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│ +╰───────────────────────────────────┴───┴──┴───┴──┴───┴──┴───┴──╯ +]) +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], -- 2.30.2