X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Flanguage%2Fstats%2Ffrequencies.q;h=e1d6fb0e3dfcaa95518dc2f60b346da92199887b;hb=8b71948cd57dbd2787cb4c50525b957e9be8a62b;hp=e670c089b5c69c93a40ba52427a254d34c3b6732;hpb=7878e5e2f2d1045bba2483ab9a752ceae50086f3;p=pspp-builds.git diff --git a/src/language/stats/frequencies.q b/src/language/stats/frequencies.q index e670c089..e1d6fb0e 100644 --- a/src/language/stats/frequencies.q +++ b/src/language/stats/frequencies.q @@ -207,6 +207,8 @@ struct freq_tab struct hsh_table *data; /* Undifferentiated data. */ struct freq_mutable *valid; /* Valid freqs. */ int n_valid; /* Number of total freqs. */ + const struct dictionary *dict; /* The dict from whence entries in the table + come */ struct freq_mutable *missing; /* Missing freqs. */ int n_missing; /* Number of missing freqs. */ @@ -756,6 +758,7 @@ frq_custom_variables (struct lexer *lexer, struct dataset *ds, struct cmd_freque } vf = var_attach_aux (v, xmalloc (sizeof *vf), var_dtor_free); vf->tab.valid = vf->tab.missing = NULL; + vf->tab.dict = dataset_dict (ds); vf->n_groups = 0; vf->groups = NULL; vf->width = var_get_width (v); @@ -1043,32 +1046,16 @@ dump_full (const struct variable *v, const struct variable *wv) struct freq_tab *ft; struct freq_mutable *f; struct tab_table *t; - int r; + int r, x; double cum_total = 0.0; double cum_freq = 0.0; - struct init - { - int c, r; - const char *s; - }; - - const struct init *p; - - static const struct init vec[] = - { - {4, 0, N_("Valid")}, - {5, 0, N_("Cum")}, - {1, 1, N_("Value")}, - {2, 1, N_("Frequency")}, - {3, 1, N_("Percent")}, - {4, 1, N_("Percent")}, - {5, 1, N_("Percent")}, - {0, 0, NULL}, - {1, 0, NULL}, - {2, 0, NULL}, - {3, 0, NULL}, - {-1, -1, NULL}, + static const char *headings[] = { + N_("Value"), + N_("Frequency"), + N_("Percent"), + N_("Valid Percent"), + N_("Cum Percent") }; const bool lab = (cmd.labels == FRQ_LABELS); @@ -1078,21 +1065,20 @@ dump_full (const struct variable *v, const struct variable *wv) vf = get_var_freqs (v); ft = &vf->tab; n_categories = ft->n_valid + ft->n_missing; - t = tab_create (5 + lab, n_categories + 3); - tab_headers (t, 0, 0, 2, 0); + t = tab_create (5 + lab, n_categories + 2); + tab_headers (t, 0, 0, 1, 0); aux = xmalloc (sizeof *aux); aux->show_labels = lab; tab_dim (t, full_dim, full_dim_free, aux); if (lab) - tab_text (t, 0, 1, TAB_CENTER | TAT_TITLE, _("Value Label")); + tab_text (t, 0, 0, TAB_CENTER | TAT_TITLE, _("Value Label")); - for (p = vec; p->s; p++) - tab_text (t, lab ? p->c : p->c - 1, p->r, - TAB_CENTER | TAT_TITLE, gettext (p->s)); + for (x = 0; x < 5; x++) + tab_text (t, lab + x, 0, TAB_CENTER | TAT_TITLE, gettext (headings[x])); - r = 2; + r = 1; for (f = ft->valid; f < ft->missing; f++) { double percent, valid_percent; @@ -1110,7 +1096,7 @@ dump_full (const struct variable *v, const struct variable *wv) tab_text (t, 0, r, TAB_LEFT, label); } - tab_value (t, 0 + lab, r, TAB_NONE, &f->value, &vf->print); + tab_value (t, 0 + lab, r, TAB_NONE, &f->value, ft->dict, &vf->print); tab_double (t, 1 + lab, r, TAB_NONE, f->count, wfmt); tab_double (t, 2 + lab, r, TAB_NONE, percent, NULL); tab_double (t, 3 + lab, r, TAB_NONE, valid_percent, NULL); @@ -1128,7 +1114,7 @@ dump_full (const struct variable *v, const struct variable *wv) tab_text (t, 0, r, TAB_LEFT, label); } - tab_value (t, 0 + lab, r, TAB_NONE, &f->value, &vf->print); + tab_value (t, 0 + lab, r, TAB_NONE, &f->value, ft->dict, &vf->print); tab_double (t, 1 + lab, r, TAB_NONE, f->count, wfmt); tab_double (t, 2 + lab, r, TAB_NONE, f->count / ft->total_cases * 100.0, NULL); @@ -1139,7 +1125,7 @@ dump_full (const struct variable *v, const struct variable *wv) tab_box (t, TAL_1, TAL_1, cmd.spaces == FRQ_SINGLE ? -1 : TAL_GAP, TAL_1, 0, 0, 4 + lab, r); - tab_hline (t, TAL_2, 0, 4 + lab, 2); + tab_hline (t, TAL_2, 0, 4 + lab, 1); tab_hline (t, TAL_2, 0, 4 + lab, r); tab_joint_text (t, 0, r, 0 + lab, r, TAB_RIGHT | TAT_TITLE, _("Total")); tab_vline (t, TAL_0, 1, r, r); @@ -1210,7 +1196,7 @@ dump_condensed (const struct variable *v, const struct variable *wv) percent = f->count / ft->total_cases * 100.0; cum_total += f->count / ft->valid_cases * 100.0; - tab_value (t, 0, r, TAB_NONE, &f->value, &vf->print); + tab_value (t, 0, r, TAB_NONE, &f->value, ft->dict, &vf->print); tab_double (t, 1, r, TAB_NONE, f->count, wfmt); tab_double (t, 2, r, TAB_NONE, percent, NULL); tab_double (t, 3, r, TAB_NONE, cum_total, NULL); @@ -1218,7 +1204,7 @@ dump_condensed (const struct variable *v, const struct variable *wv) } for (; f < &ft->valid[n_categories]; f++) { - tab_value (t, 0, r, TAB_NONE, &f->value, &vf->print); + tab_value (t, 0, r, TAB_NONE, &f->value, ft->dict, &vf->print); tab_double (t, 1, r, TAB_NONE, f->count, wfmt); tab_double (t, 2, r, TAB_NONE, f->count / ft->total_cases * 100.0, NULL);