X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Flanguage%2Fstats%2Faggregate.c;h=640746991c3246209c56efae14df3302d8fccfd9;hb=3d859a4d0fc88efa2f2bd946f621799ef73739bd;hp=c0d1438ecb4849609b00c1a8a5c68516de41dd5a;hpb=a49b940e58f148bf111c647d9b4822025636ff80;p=pspp diff --git a/src/language/stats/aggregate.c b/src/language/stats/aggregate.c index c0d1438ecb..640746991c 100644 --- a/src/language/stats/aggregate.c +++ b/src/language/stats/aggregate.c @@ -93,24 +93,24 @@ struct agr_var /* Attributes of aggregation functions. */ const struct agr_func agr_func_tab[] = { - {"SUM", N_("Sum of values"), AGR_SV_YES, 0, -1, {FMT_F, 8, 2}}, - {"MEAN", N_("Mean average"), AGR_SV_YES, 0, -1, {FMT_F, 8, 2}}, - {"MEDIAN", N_("Median average"), AGR_SV_YES, 0, -1, {FMT_F, 8, 2}}, - {"SD", N_("Standard deviation"), AGR_SV_YES, 0, -1, {FMT_F, 8, 2}}, + {"SUM", N_("Sum of values"), AGR_SV_YES, 0, -1, { .type = FMT_F, .w = 8, .d = 2 }}, + {"MEAN", N_("Mean average"), AGR_SV_YES, 0, -1, { .type = FMT_F, .w = 8, .d = 2 }}, + {"MEDIAN", N_("Median average"), AGR_SV_YES, 0, -1, { .type = FMT_F, .w = 8, .d = 2 }}, + {"SD", N_("Standard deviation"), AGR_SV_YES, 0, -1, { .type = FMT_F, .w = 8, .d = 2 }}, {"MAX", N_("Maximum value"), AGR_SV_YES, 0, VAL_STRING, {-1, -1, -1}}, {"MIN", N_("Minimum value"), AGR_SV_YES, 0, VAL_STRING, {-1, -1, -1}}, - {"PGT", N_("Percentage greater than"), AGR_SV_YES, 1, VAL_NUMERIC, {FMT_F, 5, 1}}, - {"PLT", N_("Percentage less than"), AGR_SV_YES, 1, VAL_NUMERIC, {FMT_F, 5, 1}}, - {"PIN", N_("Percentage included in range"), AGR_SV_YES, 2, VAL_NUMERIC, {FMT_F, 5, 1}}, - {"POUT", N_("Percentage excluded from range"), AGR_SV_YES, 2, VAL_NUMERIC, {FMT_F, 5, 1}}, - {"FGT", N_("Fraction greater than"), AGR_SV_YES, 1, VAL_NUMERIC, {FMT_F, 5, 3}}, - {"FLT", N_("Fraction less than"), AGR_SV_YES, 1, VAL_NUMERIC, {FMT_F, 5, 3}}, - {"FIN", N_("Fraction included in range"), AGR_SV_YES, 2, VAL_NUMERIC, {FMT_F, 5, 3}}, - {"FOUT", N_("Fraction excluded from range"), AGR_SV_YES, 2, VAL_NUMERIC, {FMT_F, 5, 3}}, - {"N", N_("Number of cases"), AGR_SV_NO, 0, VAL_NUMERIC, {FMT_F, 7, 0}}, - {"NU", N_("Number of cases (unweighted)"), AGR_SV_OPT, 0, VAL_NUMERIC, {FMT_F, 7, 0}}, - {"NMISS", N_("Number of missing values"), AGR_SV_YES, 0, VAL_NUMERIC, {FMT_F, 7, 0}}, - {"NUMISS", N_("Number of missing values (unweighted)"), AGR_SV_YES, 0, VAL_NUMERIC, {FMT_F, 7, 0}}, + {"PGT", N_("Percentage greater than"), AGR_SV_YES, 1, VAL_NUMERIC, { .type = FMT_F, .w = 5, .d = 1 }}, + {"PLT", N_("Percentage less than"), AGR_SV_YES, 1, VAL_NUMERIC, { .type = FMT_F, .w = 5, .d = 1 }}, + {"PIN", N_("Percentage included in range"), AGR_SV_YES, 2, VAL_NUMERIC, { .type = FMT_F, .w = 5, .d = 1 }}, + {"POUT", N_("Percentage excluded from range"), AGR_SV_YES, 2, VAL_NUMERIC, { .type = FMT_F, .w = 5, .d = 1 }}, + {"FGT", N_("Fraction greater than"), AGR_SV_YES, 1, VAL_NUMERIC, { .type = FMT_F, .w = 5, .d = 3 }}, + {"FLT", N_("Fraction less than"), AGR_SV_YES, 1, VAL_NUMERIC, { .type = FMT_F, .w = 5, .d = 3 }}, + {"FIN", N_("Fraction included in range"), AGR_SV_YES, 2, VAL_NUMERIC, { .type = FMT_F, .w = 5, .d = 3 }}, + {"FOUT", N_("Fraction excluded from range"), AGR_SV_YES, 2, VAL_NUMERIC, { .type = FMT_F, .w = 5, .d = 3 }}, + {"N", N_("Number of cases"), AGR_SV_NO, 0, VAL_NUMERIC, { .type = FMT_F, .w = 7, .d = 0 }}, + {"NU", N_("Number of cases (unweighted)"), AGR_SV_OPT, 0, VAL_NUMERIC, { .type = FMT_F, .w = 7, .d = 0 }}, + {"NMISS", N_("Number of missing values"), AGR_SV_YES, 0, VAL_NUMERIC, { .type = FMT_F, .w = 7, .d = 0 }}, + {"NUMISS", N_("Number of missing values (unweighted)"), AGR_SV_YES, 0, VAL_NUMERIC, { .type = FMT_F, .w = 7, .d = 0 }}, {"FIRST", N_("First non-missing value"), AGR_SV_YES, 0, VAL_STRING, {-1, -1, -1}}, {"LAST", N_("Last non-missing value"), AGR_SV_YES, 0, VAL_STRING, {-1, -1, -1}}, {NULL, NULL, AGR_SV_NO, 0, -1, {-1, -1, -1}}, @@ -129,13 +129,13 @@ struct agr_proc /* Break variables. */ struct subcase sort; /* Sort criteria (break variables). */ const struct variable **break_vars; /* Break variables. */ - size_t break_var_cnt; /* Number of break variables. */ + size_t break_n_vars; /* Number of break variables. */ enum missing_treatment missing; /* How to treat missing values. */ struct agr_var *agr_vars; /* First aggregate variable. */ struct dictionary *dict; /* Aggregate dictionary. */ const struct dictionary *src_dict; /* Dict of the source */ - int case_cnt; /* Counts aggregated cases. */ + int n_cases; /* Counts aggregated cases. */ bool add_variables; /* True iff the aggregated variables should be appended to the existing dictionary */ @@ -206,7 +206,7 @@ cmd_aggregate (struct lexer *lexer, struct dataset *ds) goto error; } - if ( agr.add_variables ) + if (agr.add_variables) agr.dict = dict_clone (dict); else agr.dict = dict_create (dict_get_encoding (dict)); @@ -241,10 +241,10 @@ cmd_aggregate (struct lexer *lexer, struct dataset *ds) if (!parse_sort_criteria (lexer, dict, &agr.sort, &agr.break_vars, &saw_direction)) goto error; - agr.break_var_cnt = subcase_get_n_fields (&agr.sort); + agr.break_n_vars = subcase_get_n_fields (&agr.sort); if (! agr.add_variables) - for (i = 0; i < agr.break_var_cnt; i++) + for (i = 0; i < agr.break_n_vars; i++) dict_clone_var_assert (agr.dict, agr.break_vars[i]); /* BREAK must follow the options. */ @@ -272,7 +272,7 @@ cmd_aggregate (struct lexer *lexer, struct dataset *ds) dict_set_split_vars (agr.dict, NULL, 0); /* Initialize. */ - agr.case_cnt = 0; + agr.n_cases = 0; if (out_file == NULL) { @@ -297,7 +297,7 @@ cmd_aggregate (struct lexer *lexer, struct dataset *ds) } for (grouper = casegrouper_create_vars (input, agr.break_vars, - agr.break_var_cnt); + agr.break_n_vars); casegrouper_get_next_group (grouper, &group); casereader_destroy (group)) { @@ -312,7 +312,7 @@ cmd_aggregate (struct lexer *lexer, struct dataset *ds) initialize_aggregate_info (&agr); - if ( agr.add_variables ) + if (agr.add_variables) placeholder = casereader_clone (group); { @@ -565,7 +565,7 @@ parse_aggregate_functions (struct lexer *lexer, const struct dictionary *dict, variables. */ for (i = 0; i < n_dest; i++) { - struct agr_var *v = xzalloc (sizeof *v); + struct agr_var *v = XZALLOC (struct agr_var); /* Add variable to chain. */ if (agr->agr_vars != NULL) @@ -708,7 +708,7 @@ agr_destroy (struct agr_proc *agr) { struct agr_var *iter, *next; - subcase_destroy (&agr->sort); + subcase_uninit (&agr->sort); free (agr->break_vars); for (iter = agr->agr_vars; iter; iter = next) { @@ -754,7 +754,7 @@ accumulate_aggregate_info (struct agr_proc *agr, const struct ccase *input) const union value *v = case_data (input, iter->src); int src_width = var_get_width (iter->src); - if (var_is_value_missing (iter->src, v, iter->exclude)) + if (var_is_value_missing (iter->src, v) & iter->exclude) { switch (iter->function) { @@ -789,12 +789,11 @@ accumulate_aggregate_info (struct agr_proc *agr, const struct ccase *input) cout = case_create (casewriter_get_proto (iter->writer)); - case_data_rw (cout, iter->subject)->f - = case_data (input, iter->src)->f; + *case_num_rw (cout, iter->subject) = case_num (input, iter->src); wv = dict_get_case_weight (agr->src_dict, input, NULL); - case_data_rw (cout, iter->weight)->f = wv; + *case_num_rw (cout, iter->weight) = wv; iter->cc += wv; @@ -934,16 +933,16 @@ dump_aggregate_info (const struct agr_proc *agr, struct casewriter *output, cons { struct ccase *c = case_create (dict_get_proto (agr->dict)); - if ( agr->add_variables) + if (agr->add_variables) { - case_copy (c, 0, break_case, 0, dict_get_var_cnt (agr->src_dict)); + case_copy (c, 0, break_case, 0, dict_get_n_vars (agr->src_dict)); } else { int value_idx = 0; int i; - for (i = 0; i < agr->break_var_cnt; i++) + for (i = 0; i < agr->break_n_vars; i++) { const struct variable *v = agr->break_vars[i]; value_copy (case_data_rw_idx (c, value_idx), @@ -980,7 +979,7 @@ dump_aggregate_info (const struct agr_proc *agr, struct casewriter *output, cons break; case MEDIAN: { - if ( i->writer) + if (i->writer) { struct percentile *median = percentile_create (0.5, i->cc); struct order_stats *os = &median->parent; @@ -1112,15 +1111,15 @@ initialize_aggregate_info (struct agr_proc *agr) proto = caseproto_add_width (proto, 0); proto = caseproto_add_width (proto, 0); - if ( ! iter->subject) + if (! iter->subject) iter->subject = dict_create_internal_var (0, 0); - if ( ! iter->weight) + if (! iter->weight) iter->weight = dict_create_internal_var (1, 0); subcase_init_var (&ordering, iter->subject, SC_ASCEND); iter->writer = sort_create_writer (&ordering, proto); - subcase_destroy (&ordering); + subcase_uninit (&ordering); caseproto_unref (proto); iter->cc = 0;