ONEWAY: Fix printf format specifier.
[pspp-builds.git] / src / language / stats / oneway.c
index 78bd215088d289b81e63a71a5ba5d511df4c61a9..49a34f2ed593f299cc15466d068d4c44857a2bb0 100644 (file)
@@ -39,6 +39,7 @@
 #include "linreg/sweep.h"
 #include "tukey/tukey.h"
 #include "math/categoricals.h"
+#include "math/interaction.h"
 #include "math/covariance.h"
 #include "math/levene.h"
 #include "math/moments.h"
@@ -651,10 +652,10 @@ run_oneway (const struct oneway_spec *cmd,
 
   for (v = 0; v < cmd->n_vars; ++v)
     {
-      ws.vws[v].cat = categoricals_create (&cmd->indep_var, 1, cmd->wv,
+      struct interaction *inter = interaction_create (cmd->indep_var);
+      ws.vws[v].cat = categoricals_create (&inter, 1, cmd->wv,
                                            cmd->exclude, makeit, updateit,
-                                           CONST_CAST (struct variable *,
-                                                       cmd->vars[v]),
+                                           CONST_CAST (struct variable *, cmd->vars[v]),
                                            ws.dd_total[v]);
 
       ws.vws[v].cov = covariance_2pass_create (1, &cmd->vars[v],
@@ -754,9 +755,12 @@ run_oneway (const struct oneway_spec *cmd,
 
   for (v = 0; v < cmd->n_vars; ++v)
     {
+      gsl_matrix *cm;
       struct per_var_ws *pvw = &ws.vws[v];
-      gsl_matrix *cm = covariance_calculate_unnormalized (pvw->cov);
       const struct categoricals *cats = covariance_get_categoricals (pvw->cov);
+      categoricals_done (cats);
+
+      cm = covariance_calculate_unnormalized (pvw->cov);
 
       moments1_calculate (ws.dd_total[v]->mom, &pvw->n, NULL, NULL, NULL, NULL);
 
@@ -768,7 +772,7 @@ run_oneway (const struct oneway_spec *cmd,
 
       pvw->ssa = pvw->sst - pvw->sse;
 
-      pvw->n_groups = categoricals_total (cats);
+      pvw->n_groups = categoricals_n_total (cats);
 
       pvw->mse = (pvw->sst - pvw->ssa) / (pvw->n - pvw->n_groups);
 
@@ -779,10 +783,8 @@ run_oneway (const struct oneway_spec *cmd,
     {
       const struct categoricals *cats = covariance_get_categoricals (ws.vws[v].cov);
 
-      categoricals_done (cats);
-      
-      if (categoricals_total (cats) > ws.actual_number_of_groups)
-       ws.actual_number_of_groups = categoricals_total (cats);
+      if (categoricals_n_total (cats) > ws.actual_number_of_groups)
+       ws.actual_number_of_groups = categoricals_n_total (cats);
     }
 
   casereader_destroy (input);
@@ -825,7 +827,7 @@ output_oneway (const struct oneway_spec *cmd, struct oneway_workspace *ws)
       if (ll_count (cl) != ws->actual_number_of_groups)
        {
          msg (SW,
-              _("In contrast list %zu, the number of coefficients (%d) does not equal the number of groups (%d). This contrast list will be ignored."),
+              _("In contrast list %zu, the number of coefficients (%zu) does not equal the number of groups (%d). This contrast list will be ignored."),
               i, ll_count (cl), ws->actual_number_of_groups);
 
          ll_remove (&coeff_list->ll);
@@ -1013,7 +1015,7 @@ show_descriptives (const struct oneway_spec *cmd, const struct oneway_workspace
       if ( v > 0)
        tab_hline (t, TAL_1, 0, n_cols - 1, row);
 
-      for (count = 0; count < categoricals_total (cats); ++count)
+      for (count = 0; count < categoricals_n_total (cats); ++count)
        {
          double T;
          double n, mean, variance;
@@ -1021,7 +1023,7 @@ show_descriptives (const struct oneway_spec *cmd, const struct oneway_workspace
 
          struct string vstr;
 
-         const union value *gval = categoricals_get_value_by_category (cats, count);
+         const struct ccase *gcc = categoricals_get_case_by_category (cats, count);
          const struct descriptive_data *dd = categoricals_get_user_data_by_category (cats, count);
 
          moments1_calculate (dd->mom, &n, &mean, &variance, NULL, NULL);
@@ -1031,7 +1033,7 @@ show_descriptives (const struct oneway_spec *cmd, const struct oneway_workspace
 
          ds_init_empty (&vstr);
 
-         var_append_value_name (cmd->indep_var, gval, &vstr);
+         var_append_value_name (cmd->indep_var, case_data (gcc, cmd->indep_var), &vstr);
 
          tab_text (t, 1, row + count,
                    TAB_LEFT | TAT_TITLE,
@@ -1102,7 +1104,7 @@ show_descriptives (const struct oneway_spec *cmd, const struct oneway_workspace
        tab_double (t, 9, row + count, 0,  ws->dd_total[v]->maximum, fmt);
       }
 
-      row += categoricals_total (cats) + 1;
+      row += categoricals_n_total (cats) + 1;
     }
 
   tab_submit (t);
@@ -1231,13 +1233,13 @@ show_contrast_coeffs (const struct oneway_spec *cmd, const struct oneway_workspa
           ++count, coeffi = ll_next (coeffi))
        {
          const struct categoricals *cats = covariance_get_categoricals (cov);
-         const union value *val = categoricals_get_value_by_category (cats, count);
+         const struct ccase *gcc = categoricals_get_case_by_category (cats, count);
          struct coeff_node *coeffn = ll_data (coeffi, struct coeff_node, ll);
          struct string vstr;
 
          ds_init_empty (&vstr);
 
-         var_append_value_name (cmd->indep_var, val, &vstr);
+         var_append_value_name (cmd->indep_var, case_data (gcc, cmd->indep_var), &vstr);
 
          tab_text (t, count + 2, 1, TAB_CENTER | TAT_TITLE, ds_cstr (&vstr));
 
@@ -1518,10 +1520,11 @@ show_comparisons (const struct oneway_spec *cmd, const struct oneway_workspace *
          struct string vstr;
          int j;
          struct descriptive_data *dd_i = categoricals_get_user_data_by_category (cat, i);
-         const union value *gval = categoricals_get_value_by_category (cat, i);
+         const struct ccase *gcc = categoricals_get_case_by_category (cat, i);
+         
 
          ds_init_empty (&vstr);
-         var_append_value_name (cmd->indep_var, gval, &vstr);
+         var_append_value_name (cmd->indep_var, case_data (gcc, cmd->indep_var), &vstr);
 
          if ( i != 0)
            tab_hline (t, TAL_1, 1, n_cols - 1, r);
@@ -1534,13 +1537,14 @@ show_comparisons (const struct oneway_spec *cmd, const struct oneway_workspace *
              double std_err;
              double weight_j, mean_j, var_j;
              double half_range;
+             const struct ccase *cc;
              struct descriptive_data *dd_j = categoricals_get_user_data_by_category (cat, j);
              if (j == i)
                continue;
 
              ds_clear (&vstr);
-             gval = categoricals_get_value_by_category (cat, j);
-             var_append_value_name (cmd->indep_var, gval, &vstr);
+             cc = categoricals_get_case_by_category (cat, j);
+             var_append_value_name (cmd->indep_var, case_data (cc, cmd->indep_var), &vstr);
              tab_text (t, 2, r + rx, TAB_LEFT | TAT_TITLE, ds_cstr (&vstr));
 
              moments1_calculate (dd_j->mom, &weight_j, &mean_j, &var_j, 0, 0);