- struct freq_mutable fr;
- void **p;
-
- fr.value = *case_data (c, var);
- fr.count = dict_get_case_weight (dict, c, &warn);
-
- p = hsh_probe (freq_hash, &fr);
- if (*p == NULL)
- {
- struct freq_mutable *new_fr = *p = xmalloc (sizeof *new_fr);
- value_init (&new_fr->value, width);
- value_copy (&new_fr->value, &fr.value, width);
- new_fr->count = fr.count;
- }
- else
- {
- struct freq *existing_fr = *p;
- existing_fr->count += fr.count;
- }
- }
- if (casereader_destroy (input))
- return freq_hash;
- else
- {
- hsh_destroy (freq_hash);
- return NULL;
- }
-}
-
-
-
-static struct tab_table *
-create_variable_frequency_table (const struct dictionary *dict,
- struct casereader *input,
- const struct chisquare_test *test,
- int v,
- struct hsh_table **freq_hash)
-
-{
- int i;
- const struct one_sample_test *ost = (const struct one_sample_test*)test;
- int n_cells;
- struct tab_table *table ;
- const struct variable *var = ost->vars[v];
-
- *freq_hash = create_freq_hash (dict, input, var);
- if (*freq_hash == NULL)
- return NULL;
-
- n_cells = hsh_count (*freq_hash);
-
- if ( test->n_expected > 0 && n_cells != test->n_expected )
- {
- msg(ME, _("CHISQUARE test specified %d expected values, but"
- " %d distinct values were encountered in variable %s."),
- test->n_expected, n_cells,
- var_get_name (var)
- );
- hsh_destroy (*freq_hash);
- *freq_hash = NULL;
- return NULL;
- }
-
- table = tab_create(4, n_cells + 2, 0);
- tab_dim (table, tab_natural_dimensions, NULL);
-
- tab_title (table, var_to_string(var));
- tab_text (table, 1, 0, TAB_LEFT, _("Observed N"));
- tab_text (table, 2, 0, TAB_LEFT, _("Expected N"));
- tab_text (table, 3, 0, TAB_LEFT, _("Residual"));
-
- tab_headers (table, 1, 0, 1, 0);
-
- tab_box (table, TAL_1, TAL_1, -1, -1,
- 0, 0, table->nc - 1, tab_nr(table) - 1 );
-
- tab_hline (table, TAL_1, 0, tab_nc(table) - 1, 1);
-
- tab_vline (table, TAL_2, 1, 0, tab_nr(table) - 1);
- for ( i = 2 ; i < 4 ; ++i )
- tab_vline (table, TAL_1, i, 0, tab_nr(table) - 1);
-
-
- tab_text (table, 0, table->nr - 1, TAB_LEFT, _("Total"));
-
- return table;
-}
-
-
-static struct tab_table *
-create_combo_frequency_table (const struct chisquare_test *test)
-{
- int i;
- const struct one_sample_test *ost = (const struct one_sample_test*)test;
-
- struct tab_table *table ;
-
- int n_cells = test->hi - test->lo + 1;
-
- table = tab_create(1 + ost->n_vars * 4, n_cells + 3, 0);
- tab_dim (table, tab_natural_dimensions, NULL);
-
- tab_title (table, _("Frequencies"));
- for ( i = 0 ; i < ost->n_vars ; ++i )
- {
- const struct variable *var = ost->vars[i];
- tab_text (table, i * 4 + 1, 1, TAB_LEFT, _("Category"));
- tab_text (table, i * 4 + 2, 1, TAB_LEFT, _("Observed N"));
- tab_text (table, i * 4 + 3, 1, TAB_LEFT, _("Expected N"));
- tab_text (table, i * 4 + 4, 1, TAB_LEFT, _("Residual"));
-
- tab_vline (table, TAL_2, i * 4 + 1,
- 0, tab_nr (table) - 1);
-
- tab_vline (table, TAL_1, i * 4 + 2,
- 0, tab_nr (table) - 1);
-
- tab_vline (table, TAL_1, i * 4 + 3,
- 1, tab_nr (table) - 1);