projects
/
pspp
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Redo VFM interface. Get rid of compaction_necessary, compaction_nval,
[pspp]
/
src
/
descript.q
diff --git
a/src/descript.q
b/src/descript.q
index 748655ca16cba1625776dc91ea1ecb05523328e6..3e5c6a4e427a16be5e2886a2d1956468a0cc3db6 100644
(file)
--- a/
src/descript.q
+++ b/
src/descript.q
@@
-30,7
+30,6
@@
#include "command.h"
#include "lexer.h"
#include "error.h"
#include "command.h"
#include "lexer.h"
#include "error.h"
-#include "approx.h"
#include "magic.h"
#include "stats.h"
#include "som.h"
#include "magic.h"
#include "stats.h"
#include "som.h"
@@
-178,9
+177,9
@@
static void dump_z_table (void);
static void run_z_pass (void);
/* Procedure execution functions. */
static void run_z_pass (void);
/* Procedure execution functions. */
-static int calc (struct ccase *);
-static void precalc (void);
-static void postcalc (void);
+static int calc (struct ccase *
, void *
);
+static void precalc (void
*
);
+static void postcalc (void
*
);
static void display (void);
\f
/* Parser and outline. */
static void display (void);
\f
/* Parser and outline. */
@@
-288,9
+287,8
@@
cmd_descriptives (void)
}
/* Data pass! */
}
/* Data pass! */
- update_weighting (&default_dict);
bad_weight = 0;
bad_weight = 0;
- procedure
(precalc, calc, postcalc
);
+ procedure
_with_splits (precalc, calc, postcalc, NULL
);
if (bad_weight)
msg (SW, _("At least one case in the data file had a weight value "
if (bad_weight)
msg (SW, _("At least one case in the data file had a weight value "
@@
-313,10
+311,10
@@
cmd_descriptives (void)
/* Parses the VARIABLES subcommand. */
static int
/* Parses the VARIABLES subcommand. */
static int
-dsc_custom_variables (struct cmd_descriptives *cmd
unused
)
+dsc_custom_variables (struct cmd_descriptives *cmd
UNUSED
)
{
if (!lex_match_id ("VARIABLES")
{
if (!lex_match_id ("VARIABLES")
- && (token != T_ID ||
!is_varname (tokid)
)
+ && (token != T_ID ||
dict_lookup_var (default_dict, tokid) == NULL
)
&& token != T_ALL)
return 2;
lex_match ('=');
&& token != T_ALL)
return 2;
lex_match ('=');
@@
-326,7
+324,7
@@
dsc_custom_variables (struct cmd_descriptives *cmd unused)
int i, n;
n = n_variables;
int i, n;
n = n_variables;
- if (!parse_variables (
NULL
, &v_variables, &n_variables,
+ if (!parse_variables (
default_dict
, &v_variables, &n_variables,
PV_DUPLICATE | PV_SINGLE | PV_APPEND | PV_NUMERIC
| PV_NO_SCRATCH))
return 0;
PV_DUPLICATE | PV_SINGLE | PV_APPEND | PV_NUMERIC
| PV_NO_SCRATCH))
return 0;
@@
-345,7
+343,7
@@
dsc_custom_variables (struct cmd_descriptives *cmd unused)
msg (SE, _("Name for z-score variable expected."));
return 0;
}
msg (SE, _("Name for z-score variable expected."));
return 0;
}
- if (
is_varname (
tokid))
+ if (
dict_lookup_var (default_dict,
tokid))
{
msg (SE, _("Z-score variable name `%s' is a "
"duplicate variable name with a current variable."),
{
msg (SE, _("Z-score variable name `%s' is a "
"duplicate variable name with a current variable."),
@@
-384,7
+382,7
@@
try_name (char *name)
{
int i;
{
int i;
- if (
is_varname (name)
)
+ if (
dict_lookup_var (default_dict, name) != NULL
)
return 0;
for (i = 0; i < n_variables; i++)
{
return 0;
for (i = 0; i < n_variables; i++)
{
@@
-478,7
+476,8
@@
dump_z_table (void)
/* Transformation function to calculate Z-scores. */
static int
/* Transformation function to calculate Z-scores. */
static int
-descriptives_trns_proc (struct trns_header * trns, struct ccase * c)
+descriptives_trns_proc (struct trns_header * trns, struct ccase * c,
+ int case_num UNUSED)
{
struct descriptives_trns *t = (struct descriptives_trns *) trns;
struct dsc_z_score *z;
{
struct descriptives_trns *t = (struct descriptives_trns *) trns;
struct dsc_z_score *z;
@@
-540,9
+539,9
@@
run_z_pass (void)
struct variable *d;
t->z[count].s = v;
struct variable *d;
t->z[count].s = v;
- t->z[count].d = d =
force_create_variable (&
default_dict,
- v->p.dsc.zname,
-
NUMERIC, 0)
;
+ t->z[count].d = d =
dict_create_var_assert (
default_dict,
+ v->p.dsc.zname, 0);
+
d->init = 0
;
if (v->label)
{
d->label = xmalloc (strlen (v->label) + 12);
if (v->label)
{
d->label = xmalloc (strlen (v->label) + 12);
@@
-557,8
+556,7
@@
run_z_pass (void)
}
t->z[count].mean = v->p.dsc.stats[dsc_mean];
t->z[count].std_dev = v->p.dsc.stats[dsc_stddev];
}
t->z[count].mean = v->p.dsc.stats[dsc_mean];
t->z[count].std_dev = v->p.dsc.stats[dsc_stddev];
- if (t->z[count].std_dev == SYSMIS
- || approx_eq (t->z[count].std_dev, 0.0))
+ if (t->z[count].std_dev == SYSMIS || t->z[count].std_dev == 0.0)
t->z[count].mean = SYSMIS;
count++;
}
t->z[count].mean = SYSMIS;
count++;
}
@@
-570,7
+568,7
@@
run_z_pass (void)
/* Statistical calculation. */
static void
/* Statistical calculation. */
static void
-precalc (void)
+precalc (void
*aux UNUSED
)
{
int i;
{
int i;
@@
-594,7
+592,7
@@
precalc (void)
}
static int
}
static int
-calc (struct ccase * c)
+calc (struct ccase * c
, void *aux UNUSED
)
{
int i;
{
int i;
@@
-602,20
+600,13
@@
calc (struct ccase * c)
static int case_id;
/* Get the weight for this case. */
static int case_id;
/* Get the weight for this case. */
- double w;
+ double w
eight = dict_get_case_weight (default_dict, c)
;
- if (default_dict.weight_index == -1)
- w = 1.0;
- else
+ if (weight <= 0.0)
{
{
- w = c->data[default_dict.weight_index].f;
- if (w <= 0.0 || w == SYSMIS)
- {
- w = 0.0;
- bad_weight = 1;
- }
+ weight = 0.0;
+ bad_weight = 1;
}
}
-
case_id++;
/* Handle missing values. */
case_id++;
/* Handle missing values. */
@@
-628,17
+619,17
@@
calc (struct ccase * c)
{
if (opt[op_excl_miss])
{
{
if (opt[op_excl_miss])
{
- d_glob_missing += w;
+ d_glob_missing += w
eight
;
return 1;
}
else
{
return 1;
}
else
{
- d_glob_miss_list += w;
+ d_glob_miss_list += w
eight
;
goto iterate;
}
}
}
goto iterate;
}
}
}
- d_glob_valid += w;
+ d_glob_valid += w
eight
;
iterate:
for (i = 0; i < n_variables; i++)
iterate:
for (i = 0; i < n_variables; i++)
@@
-658,7
+649,7
@@
iterate:
if (X == SYSMIS
|| (!opt[op_incl_miss] && is_num_user_missing (X, v_variables[i])))
{
if (X == SYSMIS
|| (!opt[op_incl_miss] && is_num_user_missing (X, v_variables[i])))
{
- inf->miss += w;
+ inf->miss += w
eight
;
continue;
}
continue;
}
@@
-670,19
+661,19
@@
iterate:
I am happy that mathematical formulas may not be
copyrighted. */
W_old = inf->valid;
I am happy that mathematical formulas may not be
copyrighted. */
W_old = inf->valid;
- W_new = inf->valid += w;
- v = (w / W_new) * (X - inf->X_bar);
+ W_new = inf->valid += w
eight
;
+ v = (w
eight
/ W_new) * (X - inf->X_bar);
v2 = v * v;
v3 = v2 * v;
v4 = v3 * v;
v2 = v * v;
v3 = v2 * v;
v4 = v3 * v;
- w2 = w
* w
;
- w3 = w2 * w;
- w4 = w3 * w;
+ w2 = w
eight * weight
;
+ w3 = w2 * w
eight
;
+ w4 = w3 * w
eight
;
inf->M4 += (-4.0 * v * inf->M3 + 6.0 * v2 * inf->M2
inf->M4 += (-4.0 * v * inf->M3 + 6.0 * v2 * inf->M2
- + (W_new * W_new - 3 * w * W_old / w3) * v4 * W_old * W_new);
+ + (W_new * W_new - 3 * w
eight
* W_old / w3) * v4 * W_old * W_new);
inf->M3 += (-3.0 * v * inf->M2 + W_new * W_old / w2
inf->M3 += (-3.0 * v * inf->M2 + W_new * W_old / w2
- * (W_new - 2 * w) * v3);
- inf->M2 += W_new * W_old / w * v2;
+ * (W_new - 2 * w
eight
) * v3);
+ inf->M2 += W_new * W_old / w
eight
* v2;
inf->X_bar += v;
if (X < inf->min)
inf->min = X;
inf->X_bar += v;
if (X < inf->min)
inf->min = X;
@@
-693,7
+684,7
@@
iterate:
}
static void
}
static void
-postcalc (void)
+postcalc (void
*aux UNUSED
)
{
int i;
{
int i;