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 <config.h>
#include <gsl/gsl_cdf.h>
#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,
static struct variable **dependent_vars;
-static int n_dependent_vars;
+static size_t n_dependent_vars;
struct factor
/* Function to use for testing for missing values */
-static is_missing_func value_is_missing;
+static is_missing_func *value_is_missing;
/* PERCENTILES */
/* 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;
if ( cmd.sbc_plot)
{
- int v;
+ size_t v;
struct factor_statistics **fs = fctr->fs ;
}
+/* 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)
{
for ( i = 0 ; i < subc_list_double_count(l) ; ++i )
{
- struct percentile *p = xmalloc (sizeof (struct percentile));
+ struct percentile *p = xmalloc (sizeof *p);
p->p = subc_list_double_at(l,i);
+ p->v = SYSMIS;
hsh_insert(h, p);
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();
assert(n_dependent_vars);
- totals = xmalloc( sizeof(struct metrics) * n_dependent_vars);
+ totals = xnmalloc (n_dependent_vars, sizeof *totals);
if ( lex_match(T_BY))
{
examine_parse_independent_vars(struct cmd_examine *cmd)
{
int success;
- struct factor *sf = xmalloc(sizeof(struct factor));
+ struct factor *sf = xmalloc (sizeof *sf);
if ((token != T_ID || dict_lookup_var (default_dict, tokid) == NULL)
&& token != T_ALL)
void
factor_calc(struct ccase *c, int case_no, double weight, int case_missing)
{
- int v;
+ size_t v;
struct factor *fctr = factors;
while ( fctr)
{
+ struct factor_statistics **foo ;
union value indep_vals[2] ;
indep_vals[0] = * case_data(c, fctr->indep_var[0]->fv);
assert(fctr->fstats);
- struct factor_statistics **foo = ( struct factor_statistics ** )
+ foo = ( struct factor_statistics ** )
hsh_probe(fctr->fstats, (void *) &indep_vals);
if ( !*foo )
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);
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;
}
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);
hsh_probe(fctr->fstats, (void *) &key );
if ( !*ffs ) {
- int i;
+ size_t i;
(*ffs) = create_factor_statistics (n_dependent_vars,
&key[0], &key[1]);
for ( i = 0 ; i < n_dependent_vars ; ++i )
if ( totals )
{
- int i;
+ size_t i;
for ( i = 0 ; i < n_dependent_vars ; ++i )
{
metrics_destroy(&totals[i]);
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,
assert(p);
+
tab_float (tbl, col + 2,
row + 4,
TAB_CENTER,
p->v,
8, 2);
}
+
tab_text (tbl, col,
row + 5,
{
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);
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;
{
/* 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 = xnmalloc (m->n_data, sizeof *d_data);
double d_max = -DBL_MAX;
double d_min = DBL_MAX;
for ( i = 0 ; i < m->n_data; ++i )