X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Flanguage%2Fstats%2Fexamine.q;h=78ea0e63c0b1989f3f35a0a1e1105e5bb269f76d;hb=d4fdb8d1a601d45340fc29f0af38f0aef151fb0b;hp=b564ba4415991aa1593f828fcdfc197635e6437d;hpb=cc57a28ef6796ae9a64ef80d453f72126956d49d;p=pspp diff --git a/src/language/stats/examine.q b/src/language/stats/examine.q index b564ba4415..78ea0e63c0 100644 --- a/src/language/stats/examine.q +++ b/src/language/stats/examine.q @@ -122,6 +122,9 @@ struct factor_metrics /* Sum of all weights, including those for missing values */ double n; + /* Sum of weights of non_missing values */ + double n_valid; + double mean; double variance; @@ -934,23 +937,27 @@ examine_group (struct cmd_examine *cmd, struct casereader *reader, int level, case_data_idx (c, casereader_get_value_cnt (reader) - 1)->f; const double weight = wv ? case_data (c, wv)->f : 1.0; + const union value *value = case_data (c, dependent_vars[v]); if (weight != SYSMIS) minimize (&result->metrics[v].cmin, weight); moments1_add (result->metrics[v].moments, - case_data (c, dependent_vars[v])->f, + value->f, weight); result->metrics[v].n += weight; + if ( ! var_is_value_missing (dependent_vars[v], value, MV_ANY) ) + result->metrics[v].n_valid += weight; + extrema_add (result->metrics[v].maxima, - case_data (c, dependent_vars[v])->f, + value->f, weight, loc); extrema_add (result->metrics[v].minima, - case_data (c, dependent_vars[v])->f, + value->f, weight, loc); @@ -985,7 +992,7 @@ examine_group (struct cmd_examine *cmd, struct casereader *reader, int level, for (i = 0 ; i < metric->n_ptiles; ++i) { metric->ptl[i] = (struct percentile *) - percentile_create (percentile_list.data[i] / 100.0, metric->n); + percentile_create (percentile_list.data[i] / 100.0, metric->n_valid); if ( percentile_list.data[i] == 25) metric->quartiles[0] = metric->ptl[i];