all but last category
[pspp] / src / language / stats / ctables.c
index 1729f34f3b9adeaa2fe1bf4adc162fc53af4dca4..96d12e03fcd4d94c4c5dbddbdf3547b315e560cf 100644 (file)
@@ -1435,15 +1435,21 @@ ctables_execute (struct dataset *ds, struct ctables *ct)
             {
               struct ctables_freqtab *ft = t->fts[j];
 
-#if 0
               for (size_t k = 0; k < ft->vars.n; k++)
                 {
                   const struct variable *var = ft->vars.vars[k];
-                  if (
-
-
+                  switch (var_is_value_missing (var, case_data (c, var)))
+                    {
+                    case MV_SYSTEM:
+                      goto next_ft;
+
+                    case MV_USER:
+                      if (!t->categories[var_get_dict_index (var)]
+                          || !t->categories[var_get_dict_index (var)]->include_missing)
+                        goto next_ft;
+                      break;
+                    }
                 }
-#endif
               size_t hash = 0;
               for (size_t k = 0; k < ft->vars.n; k++)
                 {
@@ -1520,9 +1526,15 @@ ctables_execute (struct dataset *ds, struct ctables *ct)
                     break;
 
               for (size_t m = n_common; m + 1 < ft->vars.n; m++)
-                groups[m] = pivot_category_create_group__ (
-                  m > 0 ? groups[m - 1] : d->root,
-                  pivot_value_new_var_value (ft->vars.vars[m], &f->values[m]));
+                {
+                  struct pivot_category *parent = m > 0 ? groups[m - 1] : d->root;
+                  if (true)
+                    parent = pivot_category_create_group__ (
+                      parent, pivot_value_new_variable (ft->vars.vars[m]));
+                  groups[m] = pivot_category_create_group__ (
+                    parent,
+                    pivot_value_new_var_value (ft->vars.vars[m], &f->values[m]));
+                }
 
               int leaf = pivot_category_create_leaf (
                 ft->vars.n > 1 ? groups[ft->vars.n - 2] : d->root,