/* PSPP - a program for statistical analysis.
- Copyright (C) 2004 Free Software Foundation, Inc.
+ Copyright (C) 2004, 2009 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
#include <data/procedure.h>
#include <data/value-labels.h>
#include <data/variable.h>
+#include <data/format.h>
#include <language/command.h>
#include <language/dictionary/split-file.h>
#include <language/lexer/lexer.h>
/* Output functions */
static void show_summary (const struct variable **dependent_var, int n_dep_var,
- const struct factor *f);
+ const struct dictionary *dict,
+ const struct factor *f);
static void show_extremes (const struct variable **dependent_var,
- int n_dep_var,
- const struct factor *factor,
- int n_extremities);
+ int n_dep_var,
+ const struct factor *factor,
+ int n_extremities);
static void show_descriptives (const struct variable **dependent_var,
int n_dep_var,
static void run_examine (struct cmd_examine *, struct casereader *,
struct dataset *);
-static void output_examine (void);
+static void output_examine (const struct dictionary *dict);
void factor_calc (const struct ccase *c, int case_no,
/* Show all the appropriate tables */
static void
-output_examine (void)
+output_examine (const struct dictionary *dict)
{
struct factor *fctr;
/* Show totals if appropriate */
if ( ! cmd.sbc_nototal || factors == 0 )
{
- show_summary (dependent_vars, n_dependent_vars, 0);
+ show_summary (dependent_vars, n_dependent_vars, dict, 0);
if ( cmd.sbc_statistics )
{
fctr = factors;
while ( fctr )
{
- show_summary (dependent_vars, n_dependent_vars, fctr);
+ show_summary (dependent_vars, n_dependent_vars, dict, fctr);
if ( cmd.sbc_statistics )
{
-void populate_percentiles (struct tab_table *tbl, int col, int row,
- const struct metrics *m);
+static void populate_percentiles (struct tab_table *tbl, int col, int row,
+ const struct metrics *m);
-void populate_descriptives (struct tab_table *t, int col, int row,
- const struct metrics *fs);
+static void populate_descriptives (struct tab_table *t, int col, int row,
+ const struct variable *,
+ const struct metrics *fs);
-void populate_extremes (struct tab_table *t, int col, int row, int n,
- const struct metrics *m);
+static void populate_extremes (struct tab_table *t, int col, int row, int n,
+ const struct variable *var,
+ const struct metrics *m);
-void populate_summary (struct tab_table *t, int col, int row,
- const struct metrics *m);
+static void populate_summary (struct tab_table *t, int col, int row,
+ const struct dictionary *dict,
+ const struct metrics *m);
}
if (ok)
- output_examine ();
+ output_examine (dict);
if ( totals )
static void
show_summary (const struct variable **dependent_var, int n_dep_var,
- const struct factor *fctr)
+ const struct dictionary *dict,
+ const struct factor *fctr)
{
static const char *subtitle[]=
{
if ( !fctr )
populate_summary (tbl, heading_columns,
(i * n_factors) + heading_rows,
+ dict,
&totals[i]);
else
{
populate_summary (tbl, heading_columns,
(i * n_factors) + count
+ heading_rows,
+ dict,
& (*fs)->m[i]);
count++ ;
}
-void
+static void
populate_summary (struct tab_table *t, int col, int row,
- const struct metrics *m)
+ const struct dictionary *dict,
+ const struct metrics *m)
{
const double total = m->n + m->n_missing ;
- tab_float (t, col + 0, row + 0, TAB_RIGHT, m->n, 8, 0);
- tab_float (t, col + 2, row + 0, TAB_RIGHT, m->n_missing, 8, 0);
- tab_float (t, col + 4, row + 0, TAB_RIGHT, total, 8, 0);
+ const struct variable *wv = dict_get_weight (dict);
+ const struct fmt_spec *wfmt = wv ? var_get_print_format (wv) : & F_8_0;
+
+ tab_double (t, col + 0, row + 0, TAB_RIGHT, m->n, wfmt);
+
+ tab_double (t, col + 2, row + 0, TAB_RIGHT, m->n_missing, wfmt);
+
+ tab_double (t, col + 4, row + 0, TAB_RIGHT, total, wfmt);
if ( total > 0 ) {
static void
show_extremes (const struct variable **dependent_var, int n_dep_var,
- const struct factor *fctr, int n_extremities)
+ const struct factor *fctr,
+ int n_extremities)
{
int i;
int heading_columns ;
const int heading_rows = 1;
struct tab_table *tbl;
+
+
int n_factors = 1;
int n_rows ;
if ( !fctr )
populate_extremes (tbl, heading_columns - 2,
- i * 2 * n_extremities * n_factors + heading_rows,
- n_extremities, &totals[i]);
-
+ i * 2 * n_extremities * n_factors + heading_rows,
+ n_extremities,
+ dependent_var[i],
+ &totals[i]);
else
{
struct factor_statistics **fs = fctr->fs;
}
populate_extremes (tbl, heading_columns - 2,
- row, n_extremities,
- & (*fs)->m[i]);
+ row, n_extremities,
+ dependent_var[i],
+ & (*fs)->m[i]);
count++ ;
fs++;
/* Fill in the extremities table */
-void
+static void
populate_extremes (struct tab_table *t,
- int col, int row, int n, const struct metrics *m)
+ int col, int row, int n,
+ const struct variable *var,
+ const struct metrics *m)
{
int extremity;
int idx=0;
-
tab_text (t, col, row,
TAB_RIGHT | TAT_TITLE ,
_ ("Highest")
for (extremity = 0; extremity < n ; ++extremity )
{
/* Highest */
- tab_float (t, col + 1, row + extremity,
+ tab_fixed (t, col + 1, row + extremity,
TAB_RIGHT,
extremity + 1, 8, 0);
/* Lowest */
- tab_float (t, col + 1, row + extremity + n,
+ tab_fixed (t, col + 1, row + extremity + n,
TAB_RIGHT,
extremity + 1, 8, 0);
if ( extremity + j >= n )
break ;
- tab_float (t, col + 3, row + extremity + j + n,
- TAB_RIGHT,
- wv->v.f, 8, 2);
+ tab_value (t, col + 3, row + extremity + j + n,
+ TAB_RIGHT,
+ &wv->v, var_get_print_format (var));
- tab_float (t, col + 2, row + extremity + j + n,
- TAB_RIGHT,
- cn->num, 8, 0);
+ tab_fixed (t, col + 2, row + extremity + j + n,
+ TAB_RIGHT,
+ cn->num, 10, 0);
if ( cn->next )
cn = cn->next;
if ( extremity + j >= n )
break ;
- tab_float (t, col + 3, row + extremity + j,
- TAB_RIGHT,
- wv->v.f, 8, 2);
+ tab_value (t, col + 3, row + extremity + j,
+ TAB_RIGHT,
+ &wv->v, var_get_print_format (var));
- tab_float (t, col + 2, row + extremity + j,
+ tab_fixed (t, col + 2, row + extremity + j,
TAB_RIGHT,
- cn->num, 8, 0);
+ cn->num, 10, 0);
if ( cn->next )
cn = cn->next;
}
populate_descriptives (tbl, heading_columns - 2,
- row, & (*fs)->m[i]);
+ row,
+ dependent_var[i],
+ & (*fs)->m[i]);
count++ ;
fs++;
{
populate_descriptives (tbl, heading_columns - 2,
- i * n_stat_rows * n_factors + heading_rows,
- &totals[i]);
+ i * n_stat_rows * n_factors + heading_rows,
+ dependent_var[i],
+ &totals[i]);
}
}
tab_submit (tbl);
-
}
/* Fill in the descriptives data */
-void
+static void
populate_descriptives (struct tab_table *tbl, int col, int row,
- const struct metrics *m)
+ const struct variable *var,
+ const struct metrics *m)
{
const double t = gsl_cdf_tdist_Qinv ((1 - cmd.n_cinterval[0] / 100.0)/2.0,
- m->n -1);
+ m->n -1);
tab_text (tbl, col,
row,
TAB_LEFT | TAT_TITLE,
_ ("Mean"));
- tab_float (tbl, col + 2,
- row,
- TAB_CENTER,
- m->mean,
- 8,2);
+ tab_double (tbl, col + 2,
+ row,
+ TAB_CENTER,
+ m->mean,
+ NULL);
- tab_float (tbl, col + 3,
- row,
- TAB_CENTER,
- m->se_mean,
- 8,3);
+ tab_double (tbl, col + 3,
+ row,
+ TAB_CENTER,
+ m->se_mean,
+ NULL);
tab_text (tbl, col,
TAB_LEFT | TAT_TITLE,
_ ("Lower Bound"));
- tab_float (tbl, col + 2,
- row + 1,
- TAB_CENTER,
- m->mean - t * m->se_mean,
- 8,3);
+ tab_double (tbl, col + 2,
+ row + 1,
+ TAB_CENTER,
+ m->mean - t * m->se_mean,
+ NULL);
tab_text (tbl, col + 1,
row + 2,
_ ("Upper Bound"));
- tab_float (tbl, col + 2,
- row + 2,
- TAB_CENTER,
- m->mean + t * m->se_mean,
- 8,3);
+ tab_double (tbl, col + 2,
+ row + 2,
+ TAB_CENTER,
+ m->mean + t * m->se_mean,
+ NULL);
tab_text (tbl, col,
row + 3,
TAB_LEFT | TAT_TITLE | TAT_PRINTF,
_ ("5%% Trimmed Mean"));
- tab_float (tbl, col + 2,
- row + 3,
- TAB_CENTER,
- m->trimmed_mean,
- 8,2);
+ tab_double (tbl, col + 2,
+ row + 3,
+ TAB_CENTER,
+ m->trimmed_mean,
+ NULL);
tab_text (tbl, col,
row + 4,
assert (p);
- tab_float (tbl, col + 2,
- row + 4,
- TAB_CENTER,
- p->v,
- 8, 2);
+ tab_double (tbl, col + 2,
+ row + 4,
+ TAB_CENTER,
+ p->v,
+ NULL);
}
TAB_LEFT | TAT_TITLE,
_ ("Variance"));
- tab_float (tbl, col + 2,
- row + 5,
- TAB_CENTER,
- m->var,
- 8,3);
+ tab_double (tbl, col + 2,
+ row + 5,
+ TAB_CENTER,
+ m->var,
+ NULL);
tab_text (tbl, col,
_ ("Std. Deviation"));
- tab_float (tbl, col + 2,
- row + 6,
- TAB_CENTER,
- m->stddev,
- 8,3);
+ tab_double (tbl, col + 2,
+ row + 6,
+ TAB_CENTER,
+ m->stddev,
+ NULL);
tab_text (tbl, col,
TAB_LEFT | TAT_TITLE,
_ ("Minimum"));
- tab_float (tbl, col + 2,
- row + 7,
- TAB_CENTER,
- m->min,
- 8,3);
+ tab_double (tbl, col + 2,
+ row + 7,
+ TAB_CENTER,
+ m->min, var_get_print_format (var));
tab_text (tbl, col,
row + 8,
TAB_LEFT | TAT_TITLE,
_ ("Maximum"));
- tab_float (tbl, col + 2,
- row + 8,
- TAB_CENTER,
- m->max,
- 8,3);
-
+ tab_double (tbl, col + 2,
+ row + 8,
+ TAB_CENTER,
+ m->max, var_get_print_format (var));
tab_text (tbl, col,
row + 9,
_ ("Range"));
- tab_float (tbl, col + 2,
- row + 9,
- TAB_CENTER,
- m->max - m->min,
- 8,3);
+ tab_double (tbl, col + 2,
+ row + 9,
+ TAB_CENTER,
+ m->max - m->min,
+ NULL);
tab_text (tbl, col,
row + 10,
assert (p1);
assert (p2);
- tab_float (tbl, col + 2,
- row + 10,
- TAB_CENTER,
- p1->v - p2->v,
- 8, 2);
+ tab_double (tbl, col + 2,
+ row + 10,
+ TAB_CENTER,
+ p1->v - p2->v,
+ NULL);
}
-
-
tab_text (tbl, col,
row + 11,
TAB_LEFT | TAT_TITLE,
_ ("Skewness"));
- tab_float (tbl, col + 2,
- row + 11,
- TAB_CENTER,
- m->skewness,
- 8,3);
+ tab_double (tbl, col + 2,
+ row + 11,
+ TAB_CENTER,
+ m->skewness,
+ NULL);
/* stderr of skewness */
- tab_float (tbl, col + 3,
- row + 11,
- TAB_CENTER,
- calc_seskew (m->n),
- 8,3);
-
+ tab_double (tbl, col + 3,
+ row + 11,
+ TAB_CENTER,
+ calc_seskew (m->n),
+ NULL);
tab_text (tbl, col,
row + 12,
_ ("Kurtosis"));
- tab_float (tbl, col + 2,
- row + 12,
- TAB_CENTER,
- m->kurtosis,
- 8,3);
+ tab_double (tbl, col + 2,
+ row + 12,
+ TAB_CENTER,
+ m->kurtosis,
+ NULL);
/* stderr of kurtosis */
- tab_float (tbl, col + 3,
- row + 12,
- TAB_CENTER,
- calc_sekurt (m->n),
- 8,3);
-
-
+ tab_double (tbl, col + 3,
+ row + 12,
+ TAB_CENTER,
+ calc_sekurt (m->n),
+ NULL);
}
i = 0;
while ( (*p) )
{
- tab_float (tbl, n_heading_columns + i++ , 1,
- TAB_CENTER,
- (*p)->p, 8, 0);
-
+ tab_fixed (tbl, n_heading_columns + i++ , 1,
+ TAB_CENTER,
+ (*p)->p,
+ 8, 0);
p++;
}
populate_percentiles (tbl, n_heading_columns - 1,
- row, & (*fs)->m[i]);
+ row,
+ & (*fs)->m[i]);
count++ ;
else
{
populate_percentiles (tbl, n_heading_columns - 1,
- i * n_stat_rows * n_factors + n_heading_rows,
- &totals[i]);
+ i * n_stat_rows * n_factors + n_heading_rows,
+ &totals[i]);
}
-
-
}
tab_submit (tbl);
-
-
}
-void
+static void
populate_percentiles (struct tab_table *tbl, int col, int row,
- const struct metrics *m)
+ const struct metrics *m)
{
int i;
i = 0;
while ( (*p) )
{
- tab_float (tbl, col + i + 1 , row,
- TAB_CENTER,
- (*p)->v, 8, 2);
- if ( (*p)->p == 25 )
- tab_float (tbl, col + i + 1 , row + 1,
+ tab_double (tbl, col + i + 1 , row,
TAB_CENTER,
- m->hinge[0], 8, 2);
+ (*p)->v,
+ NULL);
- if ( (*p)->p == 50 )
- tab_float (tbl, col + i + 1 , row + 1,
- TAB_CENTER,
- m->hinge[1], 8, 2);
+ if ( (*p)->p == 25 )
+ tab_double (tbl, col + i + 1 , row + 1,
+ TAB_CENTER,
+ m->hinge[0],
+ NULL);
- if ( (*p)->p == 75 )
- tab_float (tbl, col + i + 1 , row + 1,
- TAB_CENTER,
- m->hinge[2], 8, 2);
+ if ( (*p)->p == 50 )
+ tab_double (tbl, col + i + 1 , row + 1,
+ TAB_CENTER,
+ m->hinge[1],
+ NULL);
+ if ( (*p)->p == 75 )
+ tab_double (tbl, col + i + 1 , row + 1,
+ TAB_CENTER,
+ m->hinge[2],
+ NULL);
i++;
-
p++;
}
-
}
static void