X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Flanguage%2Fstats%2Fexamine.q;h=fe762d3306afc8225af12f6d3b034033038cbfdb;hb=6882ff1359de0c4812a62e1bfcdfbf8e68474de5;hp=aded6a8f7384bce9b8a822b5659ea78a7ed73531;hpb=f5c108becd49d78f4898cab11352291f5689d24e;p=pspp diff --git a/src/language/stats/examine.q b/src/language/stats/examine.q index aded6a8f73..fe762d3306 100644 --- a/src/language/stats/examine.q +++ b/src/language/stats/examine.q @@ -1,21 +1,18 @@ -/* PSPP - EXAMINE data for normality . -*-c-*- +/* PSPP - a program for statistical analysis. + Copyright (C) 2004 Free Software Foundation, Inc. -Copyright (C) 2004 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 + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. -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 the Free Software Foundation; either version 2 of the -License, or (at your option) any later version. + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. -This program is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -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., 51 Franklin Street, Fifth Floor, Boston, MA -02110-1301, USA. */ + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ #include @@ -35,10 +32,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA #include #include #include -#include #include #include -#include #include #include #include @@ -51,6 +46,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA #include #include "minmax.h" +#include "xalloc.h" #include "gettext.h" #define _(msgid) gettext (msgid) @@ -165,16 +161,18 @@ void factor_calc (const struct ccase *c, int case_no, /* Represent a factor as a string, so it can be printed in a human readable fashion */ -const char * factor_to_string (const struct factor *fctr, +static void factor_to_string (const struct factor *fctr, const struct factor_statistics *fs, - const struct variable *var); - + const struct variable *var, + struct string *str + ); /* Represent a factor as a string, so it can be printed in a human readable fashion, but sacrificing some readablility for the sake of brevity */ -const char *factor_to_string_concise (const struct factor *fctr, - struct factor_statistics *fs); +static void factor_to_string_concise (const struct factor *fctr, + const struct factor_statistics *fs, + struct string *); @@ -374,10 +372,12 @@ output_examine (void) for ( fs = fctr->fs ; *fs ; ++fs ) { - const char *s = factor_to_string (fctr, *fs, dependent_vars[v]); + struct string str; + ds_init_empty (&str); + factor_to_string (fctr, *fs, dependent_vars[v], &str); if ( cmd.a_plot[XMN_PLT_NPPLOT] ) - np_plot (& (*fs)->m[v], s); + np_plot (& (*fs)->m[v], ds_cstr (&str)); if ( cmd.a_plot[XMN_PLT_HISTOGRAM] ) { @@ -388,9 +388,11 @@ output_examine (void) normal.stddev = (*fs)->m[v].stddev; histogram_plot ((*fs)->m[v].histogram, - s, &normal, 0); + ds_cstr (&str) , &normal, 0); } + ds_destroy (&str); + } /* for ( fs .... */ } /* for ( v = 0 ..... */ @@ -723,7 +725,10 @@ run_examine (struct cmd_examine *cmd, struct casereader *input, struct factor *fctr; if (!casereader_peek (input, 0, &c)) - return; + { + casereader_destroy (input); + return; + } output_split_file_values (ds, &c); case_destroy (&c); @@ -1054,15 +1059,21 @@ show_summary (const struct variable **dependent_var, int n_dep_var, 0 != compare_values (prev, (*fs)->id[0], var_get_width (fctr->indep_var[0]))) { + struct string vstr; + ds_init_empty (&vstr); + var_append_value_name (fctr->indep_var[0], + (*fs)->id[0], &vstr); + tab_text (tbl, 1, (i * n_factors ) + count + heading_rows, TAB_LEFT | TAT_TITLE, - var_get_value_name (fctr->indep_var[0], - (*fs)->id[0]) + ds_cstr (&vstr) ); + ds_destroy (&vstr); + if (fctr->indep_var[1] && count > 0 ) tab_hline (tbl, TAL_1, 1, n_cols - 1, (i * n_factors ) + count + heading_rows); @@ -1071,15 +1082,21 @@ show_summary (const struct variable **dependent_var, int n_dep_var, prev = (*fs)->id[0]; - if ( fctr->indep_var[1]) + { + struct string vstr; + ds_init_empty (&vstr); + var_append_value_name (fctr->indep_var[1], + (*fs)->id[1], &vstr); tab_text (tbl, 2, (i * n_factors ) + count + heading_rows, TAB_LEFT | TAT_TITLE, - var_get_value_name (fctr->indep_var[1], (*fs)->id[1]) + ds_cstr (&vstr) ); + ds_destroy (&vstr); + } populate_summary (tbl, heading_columns, (i * n_factors) + count @@ -1227,6 +1244,10 @@ show_extremes (const struct variable **dependent_var, int n_dep_var, if ( !prev || 0 != compare_values (prev, (*fs)->id[0], var_get_width (fctr->indep_var[0]))) { + struct string vstr; + ds_init_empty (&vstr); + var_append_value_name (fctr->indep_var[0], + (*fs)->id[0], &vstr); if ( count > 0 ) tab_hline (tbl, TAL_1, 1, n_cols - 1, row); @@ -1234,9 +1255,10 @@ show_extremes (const struct variable **dependent_var, int n_dep_var, tab_text (tbl, 1, row, TAB_LEFT | TAT_TITLE, - var_get_value_name (fctr->indep_var[0], - (*fs)->id[0]) + ds_cstr (&vstr) ); + + ds_destroy (&vstr); } prev = (*fs)->id[0]; @@ -1245,11 +1267,19 @@ show_extremes (const struct variable **dependent_var, int n_dep_var, tab_hline (tbl, TAL_1, 2, n_cols - 1, row); if ( fctr->indep_var[1]) + { + struct string vstr; + ds_init_empty (&vstr); + var_append_value_name (fctr->indep_var[1], (*fs)->id[1], &vstr); + tab_text (tbl, 2, row, TAB_LEFT | TAT_TITLE, - var_get_value_name (fctr->indep_var[1], (*fs)->id[1]) + ds_cstr (&vstr) ); + ds_destroy (&vstr); + } + populate_extremes (tbl, heading_columns - 2, row, n_extremities, & (*fs)->m[i]); @@ -1465,6 +1495,10 @@ show_descriptives (const struct variable **dependent_var, if ( !prev || 0 != compare_values (prev, (*fs)->id[0], var_get_width (fctr->indep_var[0]))) { + struct string vstr; + ds_init_empty (&vstr); + var_append_value_name (fctr->indep_var[0], + (*fs)->id[0], &vstr); if ( count > 0 ) tab_hline (tbl, TAL_1, 1, n_cols - 1, row); @@ -1472,9 +1506,10 @@ show_descriptives (const struct variable **dependent_var, tab_text (tbl, 1, row, TAB_LEFT | TAT_TITLE, - var_get_value_name (fctr->indep_var[0], - (*fs)->id[0]) + ds_cstr (&vstr) ); + + ds_destroy (&vstr); } prev = (*fs)->id[0]; @@ -1483,11 +1518,19 @@ show_descriptives (const struct variable **dependent_var, tab_hline (tbl, TAL_1, 2, n_cols - 1, row); if ( fctr->indep_var[1]) + { + struct string vstr; + ds_init_empty (&vstr); + var_append_value_name (fctr->indep_var[1], (*fs)->id[1], &vstr); + tab_text (tbl, 2, row, TAB_LEFT | TAT_TITLE, - var_get_value_name (fctr->indep_var[1], (*fs)->id[1]) + ds_cstr (&vstr) ); + ds_destroy (&vstr); + } + populate_descriptives (tbl, heading_columns - 2, row, & (*fs)->m[i]); @@ -1747,12 +1790,14 @@ box_plot_variables (const struct factor *fctr, for ( fs = fctr->fs ; *fs ; ++fs ) { + struct string str; double y_min = DBL_MAX; double y_max = -DBL_MAX; struct chart *ch = chart_create (); - const char *s = factor_to_string (fctr, *fs, 0 ); + ds_init_empty (&str); + factor_to_string (fctr, *fs, 0, &str ); - chart_write_title (ch, s); + chart_write_title (ch, ds_cstr (&str)); for ( i = 0 ; i < n_vars ; ++i ) { @@ -1780,7 +1825,7 @@ box_plot_variables (const struct factor *fctr, } chart_submit (ch); - + ds_destroy (&str); } } @@ -1819,19 +1864,21 @@ box_plot_group (const struct factor *fctr, for ( fs = fctr->fs ; *fs ; ++fs ) { - - const char *s = factor_to_string_concise (fctr, *fs); - + struct string str; const double box_width = (ch->data_right - ch->data_left) / (n_factors * 2.0 ) ; const double box_centre = ( f++ * 2 + 1) * box_width + ch->data_left; + ds_init_empty (&str); + factor_to_string_concise (fctr, *fs, &str); + boxplot_draw_boxplot (ch, box_centre, box_width, & (*fs)->m[i], - s); + ds_cstr (&str)); + ds_destroy (&str); } } else if ( ch ) @@ -2088,6 +2135,11 @@ show_percentiles (const struct variable **dependent_var, if ( !prev || 0 != compare_values (prev, (*fs)->id[0], var_get_width (fctr->indep_var[0]))) { + struct string vstr; + ds_init_empty (&vstr); + var_append_value_name (fctr->indep_var[0], + (*fs)->id[0], &vstr); + if ( count > 0 ) tab_hline (tbl, TAL_1, 1, n_cols - 1, row); @@ -2095,11 +2147,10 @@ show_percentiles (const struct variable **dependent_var, tab_text (tbl, 1, row, TAB_LEFT | TAT_TITLE, - var_get_value_name (fctr->indep_var[0], - (*fs)->id[0]) + ds_cstr (&vstr) ); - + ds_destroy (&vstr); } prev = (*fs)->id[0]; @@ -2108,11 +2159,19 @@ show_percentiles (const struct variable **dependent_var, tab_hline (tbl, TAL_1, 2, n_cols - 1, row); if ( fctr->indep_var[1]) + { + struct string vstr; + ds_init_empty (&vstr); + var_append_value_name (fctr->indep_var[1], (*fs)->id[1], &vstr); + tab_text (tbl, 2, row, TAB_LEFT | TAT_TITLE, - var_get_value_name (fctr->indep_var[1], (*fs)->id[1]) + ds_cstr (&vstr) ); + ds_destroy (&vstr); + } + populate_percentiles (tbl, n_heading_columns - 1, row, & (*fs)->m[i]); @@ -2193,67 +2252,58 @@ populate_percentiles (struct tab_table *tbl, int col, int row, } - - -const char * +static void factor_to_string (const struct factor *fctr, const struct factor_statistics *fs, - const struct variable *var) + const struct variable *var, + struct string *str + ) { - - static char buf1[100]; - char buf2[100]; - - strcpy (buf1,""); - if (var) - sprintf (buf1, "%s (",var_to_string (var) ); + ds_put_format (str, "%s (",var_to_string (var) ); - snprintf (buf2, 100, "%s = %s", - var_to_string (fctr->indep_var[0]), - var_get_value_name (fctr->indep_var[0], fs->id[0])); + ds_put_format (str, "%s = ", + var_to_string (fctr->indep_var[0])); - strcat (buf1, buf2); + var_append_value_name (fctr->indep_var[0], fs->id[0], str); if ( fctr->indep_var[1] ) { - sprintf (buf2, "; %s = %s)", - var_to_string (fctr->indep_var[1]), - var_get_value_name (fctr->indep_var[1], fs->id[1])); - strcat (buf1, buf2); + ds_put_format (str, "; %s = )", + var_to_string (fctr->indep_var[1])); + + var_append_value_name (fctr->indep_var[1], fs->id[1], str); } else { if ( var ) - strcat (buf1, ")"); + ds_put_cstr (str, ")"); } - - return buf1; } - -const char * +static void factor_to_string_concise (const struct factor *fctr, - struct factor_statistics *fs) + const struct factor_statistics *fs, + struct string *str + ) { - - static char buf[100]; - - char buf2[100]; - - snprintf (buf, 100, "%s", - var_get_value_name (fctr->indep_var[0], fs->id[0])); + var_append_value_name (fctr->indep_var[0], fs->id[0], str); if ( fctr->indep_var[1] ) { - sprintf (buf2, ",%s)", var_get_value_name (fctr->indep_var[1], - fs->id[1]) ); - strcat (buf, buf2); - } + ds_put_cstr (str, ","); + var_append_value_name (fctr->indep_var[1],fs->id[1], str); - return buf; + ds_put_cstr (str, ")"); + } } + +/* + Local Variables: + mode: c + End: +*/