- double order = case_num_idx (*c, trns->order_case_idx);
- struct rank_trns_input_var *iv;
-
- *c = case_unshare (*c);
- for (iv = trns->input_vars; iv < &trns->input_vars[trns->n_input_vars]; iv++)
- while (iv->current != NULL)
- {
- double iv_order = case_num_idx (iv->current, 0);
- if (iv_order == order)
- {
- size_t i;
-
- for (i = 0; i < trns->n_funcs; i++)
- *case_num_rw (*c, iv->output_vars[i])
- = case_num_idx (iv->current, i + 1);
- advance_ranking (iv);
+
+ c = case_unshare_and_resize (c, trns->proto);
+ double order = case_num_idx (c, trns->order_case_idx);
+ for (struct rank_trns_input_var *iv = trns->input_vars;
+ iv < &trns->input_vars[trns->n_input_vars]; iv++)
+ {
+ for (size_t i = 0; i < trns->n_funcs; i++)
+ *case_num_rw_idx (c, iv->output_var_indexes[i]) = SYSMIS;
+
+ while (iv->current != NULL)
+ {
+ double iv_order = case_num_idx (iv->current, 0);
+ if (iv_order == order)
+ {
+ for (size_t i = 0; i < trns->n_funcs; i++)
+ *case_num_rw_idx (c, iv->output_var_indexes[i])
+ = case_num_idx (iv->current, i + 1);
+ advance_ranking (iv);
+ break;
+ }
+ else if (iv_order > order)