From d31b04850f78d3732d318051e05529f361f0e9a5 Mon Sep 17 00:00:00 2001 From: John Darrington Date: Mon, 9 Apr 2012 11:53:24 +0200 Subject: [PATCH] categoricals.c: Distinguish between missing values on the dependent and categorical variables. Needed for upcomming change to the EXAMINE command. --- src/language/stats/examine.c | 2 +- src/language/stats/glm.c | 2 +- src/language/stats/means.c | 2 +- src/language/stats/oneway.c | 2 +- src/math/categoricals.c | 14 +++++++++----- src/math/categoricals.h | 3 ++- 6 files changed, 15 insertions(+), 10 deletions(-) diff --git a/src/language/stats/examine.c b/src/language/stats/examine.c index 0cef962827..37cf0c0e3f 100644 --- a/src/language/stats/examine.c +++ b/src/language/stats/examine.c @@ -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); diff --git a/src/language/stats/glm.c b/src/language/stats/glm.c index f5ee149af0..82f1db7254 100644 --- a/src/language/stats/glm.c +++ b/src/language/stats/glm.c @@ -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); diff --git a/src/language/stats/means.c b/src/language/stats/means.c index 7ff286d7f3..502726ec67 100644 --- a/src/language/stats/means.c +++ b/src/language/stats/means.c @@ -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); } diff --git a/src/language/stats/oneway.c b/src/language/stats/oneway.c index a67493ec4a..9f660142f1 100644 --- a/src/language/stats/oneway.c +++ b/src/language/stats/oneway.c @@ -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]), diff --git a/src/math/categoricals.c b/src/math/categoricals.c index 5b5e2539ad..a7cf3a1146 100644 --- a/src/math/categoricals.c +++ b/src/math/categoricals.c @@ -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); diff --git a/src/math/categoricals.h b/src/math/categoricals.h index c221cd5694..b2f6b649b1 100644 --- a/src/math/categoricals.h +++ b/src/math/categoricals.h @@ -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 *); -- 2.30.2