Merge remote-tracking branch 'origin/master' into sheet
[pspp] / src / language / stats / mann-whitney.c
index f752b463a2d434467eb300c6c74fefc3086a2b2d..e117cc366cbfd24aefacd5631eca45a1a81c2e0c 100644 (file)
@@ -47,7 +47,7 @@ struct mw
 
   double u;  /* The Mann-Whitney U statistic */
   double w;  /* The Wilcoxon Rank Sum W statistic */
-  double z;  
+  double z;
 };
 
 static void show_ranks_box (const struct n_sample_test *nst, const struct mw *mw);
@@ -72,7 +72,7 @@ belongs_to_test (const struct ccase *c, void *aux)
   return false;
 }
 
-                                        
+
 
 void
 mann_whitney_execute (const struct dataset *ds,
@@ -100,14 +100,17 @@ mann_whitney_execute (const struct dataset *ds,
       struct ccase *c;
       const struct variable *var = nst->vars[i];
 
-      struct casereader *reader = 
+      struct casereader *reader =
        casereader_create_filter_func (casereader_clone (input),
                                       belongs_to_test,
                                       NULL,
                                       CONST_CAST (struct n_sample_test *, nst),
                                       NULL);
 
-      
+      reader = casereader_create_filter_missing (reader, &var, 1,
+                                                exclude,
+                                                NULL, NULL);
+
       reader = sort_execute_1var (reader, var);
 
       rr = casereader_create_append_rank (reader, var,
@@ -117,14 +120,10 @@ mann_whitney_execute (const struct dataset *ds,
 
       for (; (c = casereader_read (rr)); case_unref (c))
        {
-         const union value *val = case_data (c, var);
          const union value *group = case_data (c, nst->indep_var);
          const size_t group_var_width = var_get_width (nst->indep_var);
          const double rank = case_data_idx (c, rank_idx)->f;
 
-         if ( var_is_value_missing (var, val, exclude))
-           continue;
-
          if ( value_equal (group, &nst->val1, group_var_width))
            {
              mw[i].rank_sum[0] += rank;
@@ -160,7 +159,7 @@ mann_whitney_execute (const struct dataset *ds,
        denominator -= tiebreaker;
        denominator *= mwv->n[0] * mwv->n[1];
        denominator /= n * (n - 1);
-      
+
        mwv->z /= sqrt (denominator);
       }
     }
@@ -293,7 +292,7 @@ show_statistics_box (const struct n_sample_test *nst, const struct mw *mwv, bool
   tab_text (table, 3, 0, TAT_TITLE | TAB_CENTER, _("Z"));
   tab_text (table, 4, 0, TAT_TITLE | TAB_CENTER, _("Asymp. Sig. (2-tailed)"));
 
-  if (exact) 
+  if (exact)
     {
       tab_text (table, 5, 0, TAT_TITLE | TAB_CENTER, _("Exact Sig. (2-tailed)"));
       tab_text (table, 6, 0, TAT_TITLE | TAB_CENTER, _("Point Probability"));