From 6776d19d2b602afa75fd65ba7f08d90a23691645 Mon Sep 17 00:00:00 2001 From: Ben Pfaff Date: Sat, 4 Jun 2022 16:07:48 -0700 Subject: [PATCH] Revert "CTABLES work on distinguishing scale variables in summaries" This reverts commit 121e99afcdd0847a75b9a9924145a4e8042f25a5. --- src/language/stats/ctables.c | 39 +++++++++++++++------------------ tests/language/stats/ctables.at | 2 +- 2 files changed, 19 insertions(+), 22 deletions(-) diff --git a/src/language/stats/ctables.c b/src/language/stats/ctables.c index f7b2691ac0..fe46f10c92 100644 --- a/src/language/stats/ctables.c +++ b/src/language/stats/ctables.c @@ -337,7 +337,7 @@ struct ctables_summary_spec_set size_t n; size_t allocated; - struct variable *scale_var; + struct variable *var; }; static void ctables_summary_spec_set_clone (struct ctables_summary_spec_set *, @@ -730,7 +730,7 @@ ctables_summary_spec_set_clone (struct ctables_summary_spec_set *dst, .specs = specs, .n = src->n, .allocated = src->n, - .scale_var = src->scale_var + .var = src->var }; } @@ -1975,9 +1975,9 @@ nest_fts (struct ctables_stack s0, struct ctables_stack s1) assert (n == allocate); const struct ctables_nest *summary_src; - if (!a->specs[CSV_CELL].n && !a->specs[CSV_CELL].scale_var) + if (!a->specs[CSV_CELL].var) summary_src = b; - else if (!b->specs[CSV_CELL].n && !b->specs[CSV_CELL].scale_var) + else if (!b->specs[CSV_CELL].var) summary_src = a; else NOT_REACHED (); @@ -2036,7 +2036,7 @@ enumerate_fts (enum pivot_axis_type axis_type, const struct ctables_axis *a) for (enum ctables_summary_variant sv = 0; sv < N_CSVS; sv++) { ctables_summary_spec_set_clone (&nest->specs[sv], &a->specs[sv]); - nest->specs[sv].scale_var = a->var.var; + nest->specs[sv].var = a->var.var; } return (struct ctables_stack) { .nests = nest, .n = 1 }; @@ -2228,7 +2228,7 @@ ctables_summary_uninit (union ctables_summary *s, static void ctables_summary_add (union ctables_summary *s, const struct ctables_summary_spec *ss, - const struct variable *scale_var, const union value *value, + const struct variable *var, const union value *value, double d_weight, double e_weight) { /* To determine whether a case is included in a given table for a particular @@ -2252,10 +2252,9 @@ ctables_summary_add (union ctables_summary *s, switch (ss->function) { case CTSF_COUNT: - case CSTF_TOTALN: case CTSF_VALIDN: - if (scale_var && var_is_value_missing (scale_var, value)) + if (var_is_value_missing (var, value)) s->missing += d_weight; else s->valid += d_weight; @@ -2286,7 +2285,7 @@ ctables_summary_add (union ctables_summary *s, case CTSF_MISSING: case CTSF_ETOTALN: case CTSF_EVALIDN: - if (scale_var && var_is_value_missing (scale_var, value)) + if (var_is_value_missing (var, value)) s->missing += e_weight; else s->valid += e_weight; @@ -2295,9 +2294,9 @@ ctables_summary_add (union ctables_summary *s, case CTSF_MAXIMUM: case CTSF_MINIMUM: case CTSF_RANGE: - if (!var_is_value_missing (scale_var, value)) + if (!var_is_value_missing (var, value)) { - assert (!var_is_alpha (scale_var)); /* XXX? */ + assert (!var_is_alpha (var)); /* XXX? */ if (s->min == SYSMIS || value->f < s->min) s->min = value->f; if (s->max == SYSMIS || value->f > s->max) @@ -2317,14 +2316,14 @@ ctables_summary_add (union ctables_summary *s, case CTSF_LAYERPCT_SUM: case CTSF_LAYERROWPCT_SUM: case CTSF_LAYERCOLPCT_SUM: - if (!var_is_value_missing (scale_var, value)) + if (!var_is_value_missing (var, value)) moments1_add (s->moments, value->f, e_weight); break; case CTSF_MEDIAN: case CTSF_MODE: case CTSF_PTILE: - if (var_is_value_missing (scale_var, value)) + if (var_is_value_missing (var, value)) { s->ovalid += e_weight; @@ -2846,12 +2845,8 @@ ctables_cell_add__ (struct ctables_section *s, const struct ccase *c, const struct ctables_summary_spec_set *specs = &ss->specs[cell->sv]; for (size_t i = 0; i < specs->n; i++) - { - const struct variable *scale_var = specs->scale_var; - const union value *value = scale_var ? case_data (c, scale_var) : NULL; - ctables_summary_add (&cell->summaries[i], &specs->specs[i], - scale_var, value, d_weight, e_weight); - } + ctables_summary_add (&cell->summaries[i], &specs->specs[i], specs->var, + case_data (c, specs->var), d_weight, e_weight); if (cell->contributes_to_domains) { for (enum ctables_domain_type dt = 0; dt < N_CTDTS; dt++) @@ -3810,14 +3805,16 @@ ctables_prepare_table (struct ctables_table *t) specs->n = 1; enum ctables_summary_function function - = specs->scale_var ? CTSF_MEAN : CTSF_COUNT; - struct ctables_var var = { .var = specs->scale_var }; + = specs->var ? CTSF_MEAN : CTSF_COUNT; + struct ctables_var var = { .is_mrset = false, .var = specs->var }; *specs->specs = (struct ctables_summary_spec) { .function = function, .format = ctables_summary_default_format (function, &var), .label = ctables_summary_default_label (function, 0), }; + if (!specs->var) + specs->var = nest->vars[0]; ctables_summary_spec_set_clone (&nest->specs[CSV_TOTAL], &nest->specs[CSV_CELL]); diff --git a/tests/language/stats/ctables.at b/tests/language/stats/ctables.at index dca260d0ad..9d58441d88 100644 --- a/tests/language/stats/ctables.at +++ b/tests/language/stats/ctables.at @@ -708,7 +708,7 @@ AT_DATA([ctables.sps], [[GET 'nhtsa.sav'. CTABLES /TABLE=qn17 /CATEGORIES VARIABLES=qn17 TOTAL=YES LABEL='Number responding'. -CTABLES /TABLE=region > qn18 [MEAN, COUNT, TOTALS [MEAN, COUNT, TOTALN]] +CTABLES /TABLE=region > qn18 [MEAN, COUNT] /CATEGORIES VARIABLES=region TOTAL=YES LABEL='All regions'. ]]) AT_CHECK([pspp ctables.sps -O box=unicode -O width=80], [0], [dnl -- 2.30.2