categoricals.c: Distinguish between missing values on the dependent and categorical...
authorJohn Darrington <john@darrington.wattle.id.au>
Mon, 9 Apr 2012 09:53:24 +0000 (11:53 +0200)
committerJohn Darrington <john@darrington.wattle.id.au>
Mon, 9 Apr 2012 09:53:24 +0000 (11:53 +0200)
Needed for upcomming change to the EXAMINE command.

src/language/stats/examine.c
src/language/stats/glm.c
src/language/stats/means.c
src/language/stats/oneway.c
src/math/categoricals.c
src/math/categoricals.h

index 0cef962827a3c3840d69e3af292e2a6e6f191154..37cf0c0e3f6e4464cebd08cefd5a70c220cd72eb 100644 (file)
@@ -1802,7 +1802,7 @@ run_examine (struct examine *cmd, struct casereader *input)
 
   cmd->cats
     = categoricals_create (cmd->iacts, cmd->n_iacts,  
-                           cmd->wv, cmd->exclude);
+                           cmd->wv, cmd->exclude, MV_ANY);
 
   categoricals_set_payload (cmd->cats, &payload, cmd, NULL);
 
index f5ee149af017627a4b03a51a5c2d1d061c3d774f..82f1db7254d62f3a75072a84f366e42137acd249 100644 (file)
@@ -590,7 +590,7 @@ run_glm (struct glm_spec *cmd, struct casereader *input,
   struct covariance *cov;
 
   ws.cats = categoricals_create (cmd->interactions, cmd->n_interactions,
-                                cmd->wv, cmd->exclude);
+                                cmd->wv, cmd->exclude, MV_ANY);
 
   cov = covariance_2pass_create (cmd->n_dep_vars, cmd->dep_vars,
                                 ws.cats, cmd->wv, cmd->exclude);
index 7ff286d7f3d1feae8d5680b79f21e6bb65ea8a59..502726ec674e2b76fe2e73b5eeaefe42f7f3422e 100644 (file)
@@ -945,7 +945,7 @@ run_means (struct means *cmd, struct casereader *input,
     struct mtable *table = &cmd->table[t];
     table->cats
       = categoricals_create (table->interactions,
-                            table->n_layers, wv, cmd->exclude);
+                            table->n_layers, wv, cmd->dep_exclude, cmd->exclude);
 
     categoricals_set_payload (table->cats, &payload, cmd, table);
   }
index a67493ec4a048b1ec5398c9a93722c4f55a03a7b..9f660142f18fca876a7586978b7bd5b0777bee56 100644 (file)
@@ -667,7 +667,7 @@ run_oneway (const struct oneway_spec *cmd,
       payload.destroy = NULL;
 
       ws.vws[v].cat = categoricals_create (&inter, 1, cmd->wv,
-                                           cmd->exclude);
+                                           cmd->exclude, cmd->exclude);
 
       categoricals_set_payload (ws.vws[v].cat, &payload, 
                                CONST_CAST (struct variable *, cmd->vars[v]),
index 5b5e2539adc104f18532a39dafbf02677e2bf87b..a7cf3a114624d4de3a9ea5d184a516b85a1700fa 100644 (file)
@@ -165,8 +165,11 @@ struct categoricals
 
   struct pool *pool;
 
-  /* Missing values to be excluded */
-  enum mv_class exclude;
+  /* Missing values in the dependent varirable to be excluded */
+  enum mv_class dep_excl;
+
+  /* Missing values in the factor variables to be excluded */
+  enum mv_class fctr_excl;
 
   const void *aux1;
   void *aux2;
@@ -295,7 +298,7 @@ lookup_case (const struct hmap *map, const struct interaction *iact, const struc
 
 struct categoricals *
 categoricals_create (struct interaction *const*inter, size_t n_inter,
-                    const struct variable *wv, enum mv_class exclude)
+                    const struct variable *wv, enum mv_class dep_excl, enum mv_class fctr_excl)
 {
   size_t i;
   struct categoricals *cat = xmalloc (sizeof *cat);
@@ -307,7 +310,8 @@ categoricals_create (struct interaction *const*inter, size_t n_inter,
   cat->reverse_variable_map_short = NULL;
   cat->reverse_variable_map_long = NULL;
   cat->pool = pool_create ();
-  cat->exclude = exclude;
+  cat->dep_excl = dep_excl;
+  cat->fctr_excl = fctr_excl;
   cat->payload = NULL;
   cat->aux2 = NULL;
 
@@ -378,7 +382,7 @@ categoricals_update (struct categoricals *cat, const struct ccase *c)
       size_t hash;
       struct interaction_value *node;
 
-      if ( interaction_case_is_missing (iact, c, cat->exclude))
+      if ( interaction_case_is_missing (iact, c, cat->fctr_excl))
        continue;
 
       hash = interaction_case_hash (iact, c, 0);
index c221cd5694fcc81867f28ebcbd041fbe5ab0cc7d..b2f6b649b1b1d0d67b656e87fccec70802b8861a 100644 (file)
@@ -29,7 +29,8 @@ struct interaction;
 union value ;
 
 struct categoricals *categoricals_create (struct interaction *const *, size_t n_int,
-                                         const struct variable *wv, enum mv_class exclude);
+                                         const struct variable *wv, enum mv_class dep_excl,
+                                         enum mv_class fctr_excl);
 
 void categoricals_destroy (struct categoricals *);