static void precalc (struct casereader *, struct dataset *);
static void calc (const struct ccase *, const struct dataset *);
-static void postcalc (void);
+static void postcalc (const struct dataset *);
static void postprocess_freq_tab (const struct variable *);
-static void dump_full (const struct variable *);
-static void dump_condensed (const struct variable *);
-static void dump_statistics (const struct variable *, int show_varname);
+static void dump_full ( const struct variable *, const struct variable *);
+static void dump_condensed (const struct variable *, const struct variable *);
+static void dump_statistics (const struct variable *, bool show_varname, const struct variable *);
static void cleanup_freq_tab (const struct variable *);
static hsh_compare_func compare_value_numeric_a, compare_value_alpha_a;
precalc (group, ds);
for (; (c = casereader_read (group)) != NULL; case_unref (c))
calc (c, ds);
- postcalc ();
+ postcalc (ds);
}
ok = casegrouper_destroy (grouper);
ok = proc_commit (ds) && ok;
/* Finishes up with the variables after frequencies have been
calculated. Displays statistics, percentiles, ... */
static void
-postcalc (void)
+postcalc (const struct dataset *ds)
{
+ const struct dictionary *dict = dataset_dict (ds);
+ const struct variable *wv = dict_get_weight (dict);
size_t i;
for (i = 0; i < n_variables; i++)
switch (cmd.cond)
{
case FRQ_CONDENSE:
- dump_condensed (v);
+ dump_condensed (v, wv);
break;
case FRQ_STANDARD:
- dump_full (v);
+ dump_full (v, wv);
break;
case FRQ_ONEPAGE:
if (n_categories > cmd.onepage_limit)
- dump_condensed (v);
+ dump_condensed (v, wv);
else
- dump_full (v);
+ dump_full (v, wv);
break;
default:
NOT_REACHED ();
/* Statistics. */
if (n_stats)
- dump_statistics (v, !dumped_freq_tab);
+ dump_statistics (v, !dumped_freq_tab, wv);
- if ( chart == GFT_HIST)
+ if ( chart == GFT_HIST && var_is_numeric (v) )
{
double d[frq_n_stats];
struct histogram *hist ;
/* Sets the widths of all the columns and heights of all the rows in
table T for driver D. */
static void
-full_dim (struct tab_table *t, struct outp_driver *d)
+full_dim (struct tab_table *t, struct outp_driver *d, void *aux UNUSED)
{
int i = 0;
int columns = 5;
/* Displays a full frequency table for variable V. */
static void
-dump_full (const struct variable *v)
+dump_full (const struct variable *v, const struct variable *wv)
{
+ const struct fmt_spec *wfmt = wv ? var_get_print_format (wv) : &F_8_0;
int n_categories;
struct var_freqs *vf;
struct freq_tab *ft;
n_categories = ft->n_valid + ft->n_missing;
t = tab_create (5 + lab, n_categories + 3, 0);
tab_headers (t, 0, 0, 2, 0);
- tab_dim (t, full_dim);
+ tab_dim (t, full_dim, NULL);
if (lab)
tab_text (t, 0, 1, TAB_CENTER | TAT_TITLE, _("Value Label"));
}
tab_value (t, 0 + lab, r, TAB_NONE, f->value, &vf->print);
- tab_float (t, 1 + lab, r, TAB_NONE, f->count, 8, 0);
- tab_float (t, 2 + lab, r, TAB_NONE, percent, 5, 1);
- tab_float (t, 3 + lab, r, TAB_NONE, valid_percent, 5, 1);
- tab_float (t, 4 + lab, r, TAB_NONE, cum_total, 5, 1);
+ 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);
+ tab_double (t, 4 + lab, r, TAB_NONE, cum_total, NULL);
r++;
}
for (; f < &ft->valid[n_categories]; f++)
}
tab_value (t, 0 + lab, r, TAB_NONE, f->value, &vf->print);
- tab_float (t, 1 + lab, r, TAB_NONE, f->count, 8, 0);
- tab_float (t, 2 + lab, r, TAB_NONE,
- f->count / ft->total_cases * 100.0, 5, 1);
+ 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);
tab_text (t, 3 + lab, r, TAB_NONE, _("Missing"));
r++;
}
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);
- tab_float (t, 1 + lab, r, TAB_NONE, cum_freq, 8, 0);
- tab_float (t, 2 + lab, r, TAB_NONE, 100.0, 5, 1);
- tab_float (t, 3 + lab, r, TAB_NONE, 100.0, 5, 1);
+ tab_double (t, 1 + lab, r, TAB_NONE, cum_freq, wfmt);
+ tab_fixed (t, 2 + lab, r, TAB_NONE, 100.0, 5, 1);
+ tab_fixed (t, 3 + lab, r, TAB_NONE, 100.0, 5, 1);
tab_title (t, "%s", var_to_string (v));
tab_submit (t);
/* Sets the widths of all the columns and heights of all the rows in
table T for driver D. */
static void
-condensed_dim (struct tab_table *t, struct outp_driver *d)
+condensed_dim (struct tab_table *t, struct outp_driver *d, void *aux UNUSED)
{
int cum_w = MAX (outp_string_width (d, _("Cum"), OUTP_PROPORTIONAL),
MAX (outp_string_width (d, _("Cum"), OUTP_PROPORTIONAL),
/* Display condensed frequency table for variable V. */
static void
-dump_condensed (const struct variable *v)
+dump_condensed (const struct variable *v, const struct variable *wv)
{
+ const struct fmt_spec *wfmt = wv ? var_get_print_format (wv) : &F_8_0;
int n_categories;
struct var_freqs *vf;
struct freq_tab *ft;
tab_text (t, 2, 1, TAB_CENTER | TAT_TITLE, _("Pct"));
tab_text (t, 3, 0, TAB_CENTER | TAT_TITLE, _("Cum"));
tab_text (t, 3, 1, TAB_CENTER | TAT_TITLE, _("Pct"));
- tab_dim (t, condensed_dim);
+ tab_dim (t, condensed_dim, NULL);
r = 2;
for (f = ft->valid; f < ft->missing; f++)
cum_total += f->count / ft->valid_cases * 100.0;
tab_value (t, 0, r, TAB_NONE, f->value, &vf->print);
- tab_float (t, 1, r, TAB_NONE, f->count, 8, 0);
- tab_float (t, 2, r, TAB_NONE, percent, 3, 0);
- tab_float (t, 3, r, TAB_NONE, cum_total, 3, 0);
+ 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);
r++;
}
for (; f < &ft->valid[n_categories]; f++)
{
tab_value (t, 0, r, TAB_NONE, f->value, &vf->print);
- tab_float (t, 1, r, TAB_NONE, f->count, 8, 0);
- tab_float (t, 2, r, TAB_NONE,
- f->count / ft->total_cases * 100.0, 3, 0);
+ 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);
r++;
}
/* Displays a table of all the statistics requested for variable V. */
static void
-dump_statistics (const struct variable *v, int show_varname)
+dump_statistics (const struct variable *v, bool show_varname,
+ const struct variable *wv)
{
+ const struct fmt_spec *wfmt = wv ? var_get_print_format (wv) : &F_8_0;
struct freq_tab *ft;
double stat_value[frq_n_stats];
struct tab_table *t;
calc_stats (v, stat_value);
t = tab_create (3, n_stats + n_percentiles + 2, 0);
- tab_dim (t, tab_natural_dimensions);
+ tab_dim (t, tab_natural_dimensions, NULL);
tab_box (t, TAL_1, TAL_1, -1, -1 , 0 , 0 , 2, tab_nr(t) - 1) ;
{
tab_text (t, 0, r, TAB_LEFT | TAT_TITLE,
gettext (st_name[i].s10));
- tab_float (t, 2, r, TAB_NONE, stat_value[i], 11, 3);
+ tab_double (t, 2, r, TAB_NONE, stat_value[i], NULL);
r++;
}
tab_text (t, 1, 0, TAB_LEFT | TAT_TITLE, _("Valid"));
tab_text (t, 1, 1, TAB_LEFT | TAT_TITLE, _("Missing"));
- tab_float(t, 2, 0, TAB_NONE, ft->valid_cases, 11, 0);
- tab_float(t, 2, 1, TAB_NONE, ft->total_cases - ft->valid_cases, 11, 0);
-
+ tab_double (t, 2, 0, TAB_NONE, ft->valid_cases, wfmt);
+ tab_double (t, 2, 1, TAB_NONE, ft->total_cases - ft->valid_cases, wfmt);
for (i = 0; i < n_percentiles; i++, r++)
{
if (percentiles[i].p == 0.5)
tab_text (t, 1, r, TAB_LEFT, _("50 (Median)"));
else
- tab_float (t, 1, r, TAB_LEFT, percentiles[i].p * 100, 3, 0);
- tab_float (t, 2, r, TAB_NONE, percentiles[i].value, 11, 3);
-
+ tab_fixed (t, 1, r, TAB_LEFT, percentiles[i].p * 100, 3, 0);
+ tab_double (t, 2, r, TAB_NONE, percentiles[i].value,
+ var_get_print_format (v));
}
tab_columns (t, SOM_COL_DOWN, 1);