dictionary: New function var_force_valid_weight().
authorBen Pfaff <blp@cs.stanford.edu>
Sun, 28 Aug 2022 21:14:35 +0000 (14:14 -0700)
committerBen Pfaff <blp@cs.stanford.edu>
Sun, 28 Aug 2022 21:22:19 +0000 (14:22 -0700)
src/data/dictionary.c
src/data/dictionary.h

index c331ea234550f461d0ad07d3ff8300a109af440e..5fae9cf07685e1e25d1df44d9780e2c9465dedf3 100644 (file)
@@ -1253,7 +1253,7 @@ dict_get_weight (const struct dictionary *d)
 }
 
 /* Returns the value of D's weighting variable in case C, except
-   that a negative weight is returned as 0.  Returns 1 if the
+   that a negative or missing weight is returned as 0.  Returns 1 if the
    dictionary is unweighted.  Will warn about missing, negative,
    or zero values if *WARN_ON_INVALID is true.  The function will
    set *WARN_ON_INVALID to false if an invalid weight is
@@ -1274,6 +1274,15 @@ dict_get_case_weight (const struct dictionary *d, const struct ccase *c,
     }
 }
 
+/* Like dict_get_case_weight(), but additionally rounds each weight to the
+   nearest integer.  */
+double
+dict_get_rounded_case_weight (const struct dictionary *d,
+                              const struct ccase *c, bool *warn_on_invalid)
+{
+  return floor (dict_get_case_weight (d, c, warn_on_invalid) + 0.5);
+}
+
 /* Returns the format to use for weights. */
 const struct fmt_spec *
 dict_get_weight_format (const struct dictionary *d)
index 067142cfd08f18761d6b086f7cbd1edb8c4bb5d9..abc00062f198033f80555fe3fd0a229413af6a75 100644 (file)
@@ -98,6 +98,8 @@ void dict_set_names_must_be_ids (struct dictionary *, bool);
 /* Weight variable. */
 double dict_get_case_weight (const struct dictionary *,
                             const struct ccase *, bool *);
+double dict_get_rounded_case_weight (const struct dictionary *,
+                                     const struct ccase *, bool *);
 struct variable *dict_get_weight (const struct dictionary *);
 void dict_set_weight (struct dictionary *, struct variable *);
 const struct fmt_spec *dict_get_weight_format (const struct dictionary *);