Skip to content

Missing value support for integers in SPSS #251

@gorcha

Description

@gorcha

Another one from haven! 🙂
From tidyverse/haven#596.

Currently missing value support for SPSS is limited to doubles and strings because of an explicit type check in the functions that write out the missing values info:

static readstat_error_t sav_n_missing_values(int *out_n_missing_values, readstat_variable_t *r_variable) {
int n_missing_values = 0;
if (r_variable->type == READSTAT_TYPE_DOUBLE) {
n_missing_values = sav_n_missing_double_values(r_variable);
} else if (readstat_variable_get_storage_width(r_variable) <= 8) {
n_missing_values = sav_n_missing_string_values(r_variable);
}
if (abs(n_missing_values) > 3) {
return READSTAT_ERROR_TOO_MANY_MISSING_VALUE_DEFINITIONS;
}
if (out_n_missing_values)
*out_n_missing_values = n_missing_values;
return READSTAT_OK;
}

static readstat_error_t sav_emit_variable_missing_values(readstat_writer_t *writer, readstat_variable_t *r_variable) {
if (r_variable->type == READSTAT_TYPE_DOUBLE) {
return sav_emit_variable_missing_double_values(writer, r_variable);
} else if (readstat_variable_get_storage_width(r_variable) <= 8) {
return sav_emit_variable_missing_string_values(writer, r_variable);
}
return READSTAT_OK;
}

It seems like it should be OK to just use the double methods for all non-string values (since integers and 32 bit floats are all converted to doubles in SPSS output anyway) - it probably just needs a change to the conditional logic in these functions and maybe a couple of additional readstat_add_missing_* functions in here to deal with other types:
https://github.com/WizardMac/ReadStat/blob/a8e6705453f0e610a698a4d98b3dfa3087cf4b28/src/readstat_variable.c

I can chuck together a PR if you're happy with this approach?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions