projects
/
pspp
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Actually implement the new procedure code and adapt all of its clients
[pspp]
/
src
/
language
/
stats
/
examine.q
diff --git
a/src/language/stats/examine.q
b/src/language/stats/examine.q
index abbf9fc3890aada913b5b771fb57353d2362dd4d..e15d294975eb2ba26960db79b225d3ff8939635e 100644
(file)
--- a/
src/language/stats/examine.q
+++ b/
src/language/stats/examine.q
@@
-26,7
+26,8
@@
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
#include <stdlib.h>
#include <data/case.h>
#include <stdlib.h>
#include <data/case.h>
-#include <data/casefile.h>
+#include <data/casegrouper.h>
+#include <data/casereader.h>
#include <data/dictionary.h>
#include <data/procedure.h>
#include <data/value-labels.h>
#include <data/dictionary.h>
#include <data/procedure.h>
#include <data/value-labels.h>
@@
-84,7
+85,7
@@
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
static struct cmd_examine cmd;
static struct cmd_examine cmd;
-static struct variable **dependent_vars;
+static
const
struct variable **dependent_vars;
static size_t n_dependent_vars;
static size_t n_dependent_vars;
@@
-116,19
+117,19
@@
static int examine_parse_independent_vars (struct lexer *lexer, const struct dic
/* Output functions */
/* Output functions */
-static void show_summary (struct variable **dependent_var, int n_dep_var,
+static void show_summary (
const
struct variable **dependent_var, int n_dep_var,
const struct factor *f);
const struct factor *f);
-static void show_extremes (struct variable **dependent_var,
+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 (struct variable **dependent_var,
+static void show_descriptives (
const
struct variable **dependent_var,
int n_dep_var,
struct factor *factor);
int n_dep_var,
struct factor *factor);
-static void show_percentiles (struct variable **dependent_var,
+static void show_percentiles (
const
struct variable **dependent_var,
int n_dep_var,
struct factor *factor);
int n_dep_var,
struct factor *factor);
@@
-152,8
+153,8
@@
void box_plot_variables (const struct factor *fctr,
/* Per Split function */
/* Per Split function */
-static
bool run_examine (const struct ccase
*,
-
const struct casefile *cf, void *cmd_, const
struct dataset *);
+static
void run_examine (struct cmd_examine *, struct casereader
*,
+ struct dataset *);
static void output_examine (void);
static void output_examine (void);
@@
-193,6
+194,8
@@
static short sbc_percentile;
int
cmd_examine (struct lexer *lexer, struct dataset *ds)
{
int
cmd_examine (struct lexer *lexer, struct dataset *ds)
{
+ struct casegrouper *grouper;
+ struct casereader *group;
bool ok;
subc_list_double_create (&percentile_list);
bool ok;
subc_list_double_create (&percentile_list);
@@
-222,7
+225,11
@@
cmd_examine (struct lexer *lexer, struct dataset *ds)
subc_list_double_push (&percentile_list, 75);
}
subc_list_double_push (&percentile_list, 75);
}
- ok = multipass_procedure_with_splits (ds, run_examine, &cmd);
+ grouper = casegrouper_create_splits (proc_open (ds), dataset_dict (ds));
+ while (casegrouper_get_next_group (grouper, &group))
+ run_examine (&cmd, group, ds);
+ ok = casegrouper_destroy (grouper);
+ ok = proc_commit (ds) && ok;
if ( totals )
{
if ( totals )
{
@@
-525,7
+532,7
@@
xmn_custom_variables (struct lexer *lexer, struct dataset *ds, struct cmd_examin
return 2;
}
return 2;
}
- if (!parse_variables (lexer, dict, &dependent_vars, &n_dependent_vars,
+ if (!parse_variables
_const
(lexer, dict, &dependent_vars, &n_dependent_vars,
PV_NO_DUPLICATE | PV_NUMERIC | PV_NO_SCRATCH) )
{
free (dependent_vars);
PV_NO_DUPLICATE | PV_NUMERIC | PV_NO_SCRATCH) )
{
free (dependent_vars);
@@
-627,9
+634,6
@@
void populate_summary (struct tab_table *t, int col, int row,
-static bool bad_weight_warn = true;
-
-
/* Perform calculations for the sub factors */
void
factor_calc (const struct ccase *c, int case_no, double weight,
/* Perform calculations for the sub factors */
void
factor_calc (const struct ccase *c, int case_no, double weight,
@@
-706,23
+710,28
@@
factor_calc (const struct ccase *c, int case_no, double weight,
}
}
}
}
-static
bool
-run_examine (
const struct ccase *first, const struct casefile *cf
,
-
void *cmd_, const
struct dataset *ds)
+static
void
+run_examine (
struct cmd_examine *cmd, struct casereader *input
,
+
struct dataset *ds)
{
struct dictionary *dict = dataset_dict (ds);
{
struct dictionary *dict = dataset_dict (ds);
-
struct casereader *r
;
+
casenumber case_no
;
struct ccase c;
int v;
struct ccase c;
int v;
-
- const struct cmd_examine *cmd = (struct cmd_examine *) cmd_;
+ bool ok;
struct factor *fctr;
struct factor *fctr;
- output_split_file_values (ds, first);
+ if (!casereader_peek (input, 0, &c))
+ return;
+ output_split_file_values (ds, &c);
+ case_destroy (&c);
+
+ input = casereader_create_filter_weight (input, dict, NULL, NULL);
+ input = casereader_create_counter (input, &case_no, 0);
/* Make sure we haven't got rubbish left over from a
/* Make sure we haven't got rubbish left over from a
- previous split */
+ previous split
.
*/
fctr = factors;
while (fctr)
{
fctr = factors;
while (fctr)
{
@@
-738,15
+747,10
@@
run_examine (const struct ccase *first, const struct casefile *cf,
for ( v = 0 ; v < n_dependent_vars ; ++v )
metrics_precalc (&totals[v]);
for ( v = 0 ; v < n_dependent_vars ; ++v )
metrics_precalc (&totals[v]);
- for (r = casefile_get_reader (cf, NULL);
- casereader_read (r, &c) ;
- case_destroy (&c) )
+ for (; casereader_read (input, &c); case_destroy (&c))
{
{
- int case_missing=0;
- const int case_no = casereader_cnum (r);
-
- const double weight =
- dict_get_case_weight (dict, &c, &bad_weight_warn);
+ int case_missing = 0;
+ const double weight = dict_get_case_weight (dict, &c, NULL);
if ( cmd->miss == XMN_LISTWISE )
{
if ( cmd->miss == XMN_LISTWISE )
{
@@
-787,6
+791,7
@@
run_examine (const struct ccase *first, const struct casefile *cf,
factor_calc (&c, case_no, weight, case_missing);
}
factor_calc (&c, case_no, weight, case_missing);
}
+ ok = casereader_destroy (input);
for ( v = 0 ; v < n_dependent_vars ; ++v)
{
for ( v = 0 ; v < n_dependent_vars ; ++v)
{
@@
-882,7
+887,8
@@
run_examine (const struct ccase *first, const struct casefile *cf,
fctr = fctr->next;
}
fctr = fctr->next;
}
- output_examine ();
+ if (ok)
+ output_examine ();
if ( totals )
if ( totals )
@@
-893,13
+899,11
@@
run_examine (const struct ccase *first, const struct casefile *cf,
metrics_destroy (&totals[i]);
}
}
metrics_destroy (&totals[i]);
}
}
-
- return true;
}
static void
}
static void
-show_summary (struct variable **dependent_var, int n_dep_var,
+show_summary (
const
struct variable **dependent_var, int n_dep_var,
const struct factor *fctr)
{
static const char *subtitle[]=
const struct factor *fctr)
{
static const char *subtitle[]=
@@
-1124,7
+1128,7
@@
populate_summary (struct tab_table *t, int col, int row,
static void
static void
-show_extremes (struct variable **dependent_var, int n_dep_var,
+show_extremes (
const
struct variable **dependent_var, int n_dep_var,
const struct factor *fctr, int n_extremities)
{
int i;
const struct factor *fctr, int n_extremities)
{
int i;
@@
-1361,7
+1365,7
@@
populate_extremes (struct tab_table *t,
/* Show the descriptives table */
void
/* Show the descriptives table */
void
-show_descriptives (struct variable **dependent_var,
+show_descriptives (
const
struct variable **dependent_var,
int n_dep_var,
struct factor *fctr)
{
int n_dep_var,
struct factor *fctr)
{
@@
-1507,18
+1511,14
@@
show_descriptives (struct variable **dependent_var,
}
}
-
-
/* Fill in the descriptives data */
void
populate_descriptives (struct tab_table *tbl, int col, int row,
const struct metrics *m)
{
/* Fill in the descriptives data */
void
populate_descriptives (struct tab_table *tbl, int col, int row,
const struct metrics *m)
{
-
- const double t = gsl_cdf_tdist_Qinv (1 - cmd.n_cinterval[0]/100.0/2.0, \
+ 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,
tab_text (tbl, col,
row,
TAB_LEFT | TAT_TITLE,
@@
-1947,7
+1947,7
@@
np_plot (const struct metrics *m, const char *factorname)
/* Show the percentiles */
void
/* Show the percentiles */
void
-show_percentiles (struct variable **dependent_var,
+show_percentiles (
const
struct variable **dependent_var,
int n_dep_var,
struct factor *fctr)
{
int n_dep_var,
struct factor *fctr)
{