projects
/
pspp
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Add code to read character encoding to dissect-sysfile.
[pspp]
/
src
/
language
/
stats
/
examine.q
diff --git
a/src/language/stats/examine.q
b/src/language/stats/examine.q
index b564ba4415991aa1593f828fcdfc197635e6437d..78ea0e63c0b1989f3f35a0a1e1105e5bb269f76d 100644
(file)
--- 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 all weights, including those for missing values */
double n;
+ /* Sum of weights of non_missing values */
+ double n_valid;
+
double mean;
double variance;
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;
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,
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;
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,
extrema_add (result->metrics[v].maxima,
-
case_data (c, dependent_vars[v])
->f,
+
value
->f,
weight,
loc);
extrema_add (result->metrics[v].minima,
weight,
loc);
extrema_add (result->metrics[v].minima,
-
case_data (c, dependent_vars[v])
->f,
+
value
->f,
weight,
loc);
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 *)
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];
if ( percentile_list.data[i] == 25)
metric->quartiles[0] = metric->ptl[i];