X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Flanguage%2Fstats%2Ffrequencies.c;h=cf40446a77d5e944b8766594260d3500bf50e5e8;hb=refs%2Fheads%2Fctables15;hp=ce2b416e3b2b259c5d08a3f4d6f4dd56f0545c7e;hpb=6531faae1faddd300ba8ab7e996477ba642e4b6d;p=pspp diff --git a/src/language/stats/frequencies.c b/src/language/stats/frequencies.c index ce2b416e3b..cf40446a77 100644 --- a/src/language/stats/frequencies.c +++ b/src/language/stats/frequencies.c @@ -244,7 +244,8 @@ static void do_barchart(const struct frq_chart *bar, static struct frq_stats_table *frq_stats_table_submit ( struct frq_stats_table *, const struct frq_proc *, - const struct dictionary *, const struct variable *wv); + const struct dictionary *, const struct variable *wv, + const struct ccase *example); static void frq_stats_table_destroy (struct frq_stats_table *); static int @@ -492,7 +493,7 @@ output_splits_once (bool *need_splits, const struct dataset *ds, calculated. Displays statistics, percentiles, ... */ static struct frq_stats_table * postcalc (struct frq_proc *frq, const struct dataset *ds, - struct ccase *first, struct frq_stats_table *fst) + struct ccase *example, struct frq_stats_table *fst) { const struct dictionary *dict = dataset_dict (ds); const struct variable *wv = dict_get_weight (dict); @@ -509,8 +510,8 @@ postcalc (struct frq_proc *frq, const struct dataset *ds, if (frq->n_stats) { if (st != SPLIT_LAYERED) - output_splits_once (&need_splits, ds, first); - fst = frq_stats_table_submit (fst, frq, dict, wv); + output_splits_once (&need_splits, ds, example); + fst = frq_stats_table_submit (fst, frq, dict, wv, example); } for (size_t i = 0; i < frq->n_vars; i++) @@ -520,7 +521,7 @@ postcalc (struct frq_proc *frq, const struct dataset *ds, /* Frequencies tables. */ if (vf->tab.n_valid + vf->tab.n_missing <= frq->max_categories) { - output_splits_once (&need_splits, ds, first); + output_splits_once (&need_splits, ds, example); dump_freq_table (vf, wv); } @@ -535,7 +536,7 @@ postcalc (struct frq_proc *frq, const struct dataset *ds, if (histogram) { - output_splits_once (&need_splits, ds, first); + output_splits_once (&need_splits, ds, example); chart_submit (histogram_chart_create ( histogram->gsl_hist, var_to_string(vf->var), vf->tab.valid_cases, @@ -549,13 +550,13 @@ postcalc (struct frq_proc *frq, const struct dataset *ds, if (frq->pie) { - output_splits_once (&need_splits, ds, first); + output_splits_once (&need_splits, ds, example); do_piechart(frq->pie, vf->var, &vf->tab); } if (frq->bar) { - output_splits_once (&need_splits, ds, first); + output_splits_once (&need_splits, ds, example); do_barchart(frq->bar, &vf->var, &vf->tab); } @@ -578,15 +579,15 @@ frq_run (struct frq_proc *frq, struct dataset *ds) for (size_t i = 0; i < frq->n_vars; i++) hmap_init (&frq->vars[i].tab.data); - struct ccase *first = casereader_peek (group, 0); + struct ccase *example = casereader_peek (group, 0); struct ccase *c; for (; (c = casereader_read (group)) != NULL; case_unref (c)) calc (frq, c, ds); - fst = postcalc (frq, ds, first, fst); + fst = postcalc (frq, ds, example, fst); casereader_destroy (group); - case_unref (first); + case_unref (example); } frq_stats_table_destroy (fst); casegrouper_destroy (grouper); @@ -1579,8 +1580,6 @@ frq_stats_table_create (const struct frq_proc *frq, struct pivot_table *table = pivot_table_create (N_("Statistics")); pivot_table_set_weight_var (table, wv); - struct pivot_splits *splits = pivot_splits_create (table, dict); - struct pivot_dimension *variables = pivot_dimension_create (table, PIVOT_AXIS_COLUMN, N_("Variables")); for (size_t i = 0; i < frq->n_vars; i++) @@ -1614,6 +1613,9 @@ frq_stats_table_create (const struct frq_proc *frq, pc->p * 100.0)); } + struct pivot_splits *splits = pivot_splits_create (table, PIVOT_AXIS_ROW, + dict); + struct frq_stats_table *fst = xmalloc (sizeof *fst); *fst = (struct frq_stats_table) { .table = table, .splits = splits }; return fst; @@ -1623,7 +1625,8 @@ static struct frq_stats_table * frq_stats_table_submit (struct frq_stats_table *fst, const struct frq_proc *frq, const struct dictionary *dict, - const struct variable *wv) + const struct variable *wv, + const struct ccase *example) { if (!fst) { @@ -1631,6 +1634,7 @@ frq_stats_table_submit (struct frq_stats_table *fst, if (!fst) return NULL; } + pivot_splits_new_split (fst->splits, example); int var_idx = 0; for (size_t i = 0; i < frq->n_vars; i++) @@ -1642,9 +1646,9 @@ frq_stats_table_submit (struct frq_stats_table *fst, const struct freq_tab *ft = &vf->tab; int row = 0; - pivot_table_put2 (fst->table, var_idx, row++, + pivot_splits_put2 (fst->splits, fst->table, var_idx, row++, pivot_value_new_number (ft->valid_cases)); - pivot_table_put2 (fst->table, var_idx, row++, + pivot_splits_put2 (fst->splits, fst->table, var_idx, row++, pivot_value_new_number ( ft->total_cases - ft->valid_cases)); @@ -1660,7 +1664,7 @@ frq_stats_table_submit (struct frq_stats_table *fst, = (j == FRQ_ST_MODE || j == FRQ_ST_MINIMUM || j == FRQ_ST_MAXIMUM ? pivot_value_new_var_value (vf->var, &v) : pivot_value_new_number (v.f)); - pivot_table_put2 (fst->table, var_idx, row++, pv); + pivot_splits_put2 (fst->splits, fst->table, var_idx, row++, pv); } for (size_t j = 0; j < frq->n_percentiles; j++) @@ -1672,8 +1676,8 @@ frq_stats_table_submit (struct frq_stats_table *fst, union value v = { .f = vf->tab.n_valid ? vf->percentiles[j] : SYSMIS }; - pivot_table_put2 (fst->table, var_idx, row++, - pivot_value_new_var_value (vf->var, &v)); + pivot_splits_put2 (fst->splits, fst->table, var_idx, row++, + pivot_value_new_var_value (vf->var, &v)); } var_idx++;