Fixed bug in EXAMINE where the parametric calculation would crash if the weight
[pspp] / src / data / variable.c
index 971154368cb7ae5ede7b21d4f88374e6f1e4b752..6a00d014a18df32b7a85cb90bd3d6b3871444a7c 100644 (file)
@@ -1312,3 +1312,29 @@ var_clear_vardict (struct variable *v)
 {
   v->vardict = NULL;
 }
+
+\f
+/*
+  Returns zero, if W is a missing value for WV or if it is less than zero.
+  Typically used to force a numerical value into a valid weight.
+  
+  As a side effect, this function will emit a warning if the value 
+  WARN_ON_INVALID points to a bool which is TRUE.  That bool will be then
+  set to FALSE.
+ */
+double
+var_force_valid_weight (const struct variable *wv, double w, bool *warn_on_invalid)
+{
+  if (w < 0.0 || (wv && var_is_num_missing (wv, w, MV_ANY)))
+    w = 0.0;
+  
+  if (w == 0.0 && warn_on_invalid != NULL && *warn_on_invalid)
+    {
+      *warn_on_invalid = false;
+      msg (SW, _("At least one case in the data file had a weight value "
+                "that was user-missing, system-missing, zero, or "
+                "negative.  These case(s) were ignored."));
+    }
+
+  return w;
+}