Revert "CTABLES work on distinguishing scale variables in summaries"
authorBen Pfaff <blp@cs.stanford.edu>
Sat, 4 Jun 2022 23:07:48 +0000 (16:07 -0700)
committerBen Pfaff <blp@cs.stanford.edu>
Sat, 4 Jun 2022 23:07:48 +0000 (16:07 -0700)
This reverts commit 121e99afcdd0847a75b9a9924145a4e8042f25a5.

src/language/stats/ctables.c
tests/language/stats/ctables.at

index f7b2691ac0a2bc3a526c79cbbba2b7bb1668b619..fe46f10c9254cb8e556ff045e24792503af5771c 100644 (file)
@@ -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]);
index dca260d0adc027bb5aa209e8e61151f20dd24aae..9d58441d881d39761c6451b8b998bf44a0299d0d 100644 (file)
@@ -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