X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fexamine.q;h=33498d85e05ffdb89f4f70f71fe748af0ca17d18;hb=64f58bbdab17e4a09b725e713f4f82f567f44076;hp=d49f9f165ac3479b4988f07fecefa16b1995b09c;hpb=8b2b804bfce0dfdfb12f60bd2f5f8b9cec12fab9;p=pspp-builds.git diff --git a/src/examine.q b/src/examine.q index d49f9f16..33498d85 100644 --- a/src/examine.q +++ b/src/examine.q @@ -15,8 +15,8 @@ General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA -02111-1307, USA. */ +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301, USA. */ #include #include @@ -44,12 +44,16 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA #include "moments.h" #include "percentiles.h" +#include "gettext.h" +#define _(msgid) gettext (msgid) +#define N_(msgid) msgid + /* (headers) */ #include "chart.h" /* (specification) "EXAMINE" (xmn_): - *variables=custom; + *^variables=custom; +total=custom; +nototal=custom; +missing=miss:pairwise/!listwise, @@ -165,7 +169,7 @@ const char *factor_to_string_concise(const struct factor *fctr, /* Function to use for testing for missing values */ -static is_missing_func value_is_missing; +static is_missing_func *value_is_missing; /* PERCENTILES */ @@ -189,9 +193,9 @@ cmd_examine(void) /* If /MISSING=INCLUDE is set, then user missing values are ignored */ if (cmd.incl == XMN_INCLUDE ) - value_is_missing = is_system_missing; + value_is_missing = mv_is_value_system_missing; else - value_is_missing = is_missing; + value_is_missing = mv_is_value_missing; if ( cmd.st_n == SYSMIS ) cmd.st_n = 5; @@ -218,6 +222,19 @@ cmd_examine(void) if ( dependent_vars ) free (dependent_vars); + { + struct factor *f = factors ; + while ( f ) + { + struct factor *ff = f; + + f = f->next; + free ( ff->fs ); + hsh_destroy ( ff->fstats ) ; + free ( ff ) ; + } + } + subc_list_double_destroy(&percentile_list); return CMD_SUCCESS; @@ -359,6 +376,8 @@ output_examine(void) } +/* Create a hash table of percentiles and their values from the list of + percentiles */ static struct hsh_table * list_to_ptile_hash(const subc_list_double *l) { @@ -378,6 +397,7 @@ list_to_ptile_hash(const subc_list_double *l) struct percentile *p = xmalloc (sizeof (struct percentile)); p->p = subc_list_double_at(l,i); + p->v = SYSMIS; hsh_insert(h, p); @@ -397,9 +417,9 @@ xmn_custom_percentiles(struct cmd_examine *p UNUSED) lex_match('('); - while ( lex_double_p() ) + while ( lex_is_number() ) { - subc_list_double_push(&percentile_list,lex_double()); + subc_list_double_push(&percentile_list,lex_number()); lex_get(); @@ -596,6 +616,7 @@ factor_calc(struct ccase *c, int case_no, double weight, int case_missing) while ( fctr) { + struct factor_statistics **foo ; union value indep_vals[2] ; indep_vals[0] = * case_data(c, fctr->indep_var[0]->fv); @@ -607,7 +628,7 @@ factor_calc(struct ccase *c, int case_no, double weight, int case_missing) assert(fctr->fstats); - struct factor_statistics **foo = ( struct factor_statistics ** ) + foo = ( struct factor_statistics ** ) hsh_probe(fctr->fstats, (void *) &indep_vals); if ( !*foo ) @@ -629,7 +650,7 @@ factor_calc(struct ccase *c, int case_no, double weight, int case_missing) const struct variable *var = dependent_vars[v]; const union value *val = case_data (c, var->fv); - if ( value_is_missing(val,var) || case_missing ) + if ( value_is_missing (&var->miss, val) || case_missing ) val = 0; metrics_calc( &(*foo)->m[v], val, weight, case_no); @@ -691,7 +712,7 @@ run_examine(const struct casefile *cf, void *cmd_ ) const struct variable *var = dependent_vars[v]; const union value *val = case_data (&c, var->fv); - if ( value_is_missing(val,var)) + if ( value_is_missing(&var->miss, val)) case_missing = 1; } @@ -702,7 +723,7 @@ run_examine(const struct casefile *cf, void *cmd_ ) const struct variable *var = dependent_vars[v]; const union value *val = case_data (&c, var->fv); - if ( value_is_missing(val,var) || case_missing ) + if ( value_is_missing(&var->miss, val) || case_missing ) val = 0; metrics_calc(&totals[v], val, weight, case_no); @@ -1492,8 +1513,8 @@ populate_descriptives(struct tab_table *tbl, int col, int row, tab_text (tbl, col, row + 3, - TAB_LEFT | TAT_TITLE, - _("5% Trimmed Mean")); + TAB_LEFT | TAT_TITLE | TAT_PRINTF, + _("5%% Trimmed Mean")); tab_float (tbl, col + 2, row + 3, @@ -1514,12 +1535,14 @@ populate_descriptives(struct tab_table *tbl, int col, int row, assert(p); + tab_float (tbl, col + 2, row + 4, TAB_CENTER, p->v, 8, 2); } + tab_text (tbl, col, row + 5, @@ -1671,10 +1694,7 @@ box_plot_variables(const struct factor *fctr, { double y_min = DBL_MAX; double y_max = -DBL_MAX; - struct chart *ch; - - ch = chart_create(); - + struct chart *ch = chart_create(); const char *s = factor_to_string(fctr, *fs, 0 ); chart_write_title(ch, s); @@ -1759,7 +1779,7 @@ box_plot_group(const struct factor *fctr, s); } } - else + else if ( ch ) { const double box_width = (ch->data_right - ch->data_left) / 3.0; const double box_centre = (ch->data_right + ch->data_left) / 2.0; @@ -1838,8 +1858,7 @@ np_plot(const struct metrics *m, const char *factorname) { /* We have to cache the detrended data, beacause we need to find its limits before we can plot it */ - double *d_data; - d_data = xmalloc (m->n_data * sizeof(double)); + double *d_data = xmalloc (m->n_data * sizeof(double)); double d_max = -DBL_MAX; double d_min = DBL_MAX; for ( i = 0 ; i < m->n_data; ++i )