/* PSPP - a program for statistical analysis.
- Copyright (C) 1997-9, 2000, 2007, 2009, 2010, 2011 Free Software Foundation, Inc.
+ Copyright (C) 1997-9, 2000, 2007, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
}
static void *
-makeit (void *aux1, void *aux2 UNUSED)
+makeit (const void *aux1, void *aux2 UNUSED)
{
const struct variable *var = aux1;
}
static void
-updateit (void *user_data,
- enum mv_class exclude,
- const struct variable *wv,
- const struct variable *catvar UNUSED,
- const struct ccase *c,
- void *aux1, void *aux2)
+updateit (const void *aux1, void *aux2, void *user_data,
+ const struct ccase *c, double weight)
{
struct descriptive_data *dd = user_data;
struct descriptive_data *dd_total = aux2;
- double weight;
-
- if ( var_is_value_missing (varp, valx, exclude))
- return;
-
- weight = wv != NULL ? case_data (c, wv)->f : 1.0;
-
moments1_add (dd->mom, valx->f, weight);
if (valx->f < dd->minimum)
dd->minimum = valx->f;
for (v = 0; v < cmd->n_vars; ++v)
{
struct interaction *inter = interaction_create (cmd->indep_var);
+
+ struct payload payload;
+ payload.create = makeit;
+ payload.update = updateit;
+
ws.vws[v].cat = categoricals_create (&inter, 1, cmd->wv,
- cmd->exclude, makeit, updateit,
- CONST_CAST (struct variable *, cmd->vars[v]),
- ws.dd_total[v]);
+ cmd->exclude);
+
+ categoricals_set_payload (ws.vws[v].cat, &payload,
+ CONST_CAST (struct variable *, cmd->vars[v]),
+ ws.dd_total[v]);
+
ws.vws[v].cov = covariance_2pass_create (1, &cmd->vars[v],
ws.vws[v].cat,
gsl_matrix *cm;
struct per_var_ws *pvw = &ws.vws[v];
const struct categoricals *cats = covariance_get_categoricals (pvw->cov);
- categoricals_done (cats);
+ const bool ok = categoricals_done (cats);
+
+ if ( ! ok)
+ {
+ msg (MW,
+ _("Dependent variable %s has no non-missing values. No analysis for this variable will be done."),
+ var_get_name (cmd->vars[v]));
+ continue;
+ }
cm = covariance_calculate_unnormalized (pvw->cov);
{
const struct categoricals *cats = covariance_get_categoricals (ws.vws[v].cov);
+ if ( ! categoricals_is_complete (cats))
+ {
+ continue;
+ }
+
if (categoricals_n_total (cats) > ws.actual_number_of_groups)
ws.actual_number_of_groups = categoricals_n_total (cats);
}
{
int v;
for (v = 0 ; v < cmd->n_vars; ++v)
- show_comparisons (cmd, ws, v);
+ {
+ const struct categoricals *cats = covariance_get_categoricals (ws->vws[v].cov);
+
+ if ( categoricals_is_complete (cats))
+ show_comparisons (cmd, ws, v);
+ }
}
}
tab_double (t, 9, row + count, 0, dd->maximum, fmt);
}
+ if (categoricals_is_complete (cats))
{
double T;
double n, mean, variance;
tab_double (t, 7, row + count, 0,
mean + T * std_error, NULL);
+
/* Min and Max */
tab_double (t, 8, row + count, 0, ws->dd_total[v]->minimum, fmt);
tab_double (t, 9, row + count, 0, ws->dd_total[v]->maximum, fmt);