+ else if (lex_match_id (lexer, "SAVE"))
+ {
+ lex_match (lexer, T_EQUALS);
+ while (lex_token (lexer) != T_ENDCMD
+ && lex_token (lexer) != T_SLASH)
+ {
+ if (lex_match_id (lexer, "CLUSTER"))
+ {
+ qc.save_values |= SAVE_MEMBERSHIP;
+ if (lex_match (lexer, T_LPAREN))
+ {
+ if (!lex_force_id (lexer))
+ goto error;
+
+ free (qc.var_membership);
+ qc.var_membership = xstrdup (lex_tokcstr (lexer));
+ if (NULL != dict_lookup_var (dataset_dict (ds), qc.var_membership))
+ {
+ lex_error (lexer,
+ _("A variable called `%s' already exists."),
+ qc.var_membership);
+ free (qc.var_membership);
+ qc.var_membership = NULL;
+ goto error;
+ }
+
+ lex_get (lexer);
+
+ if (!lex_force_match (lexer, T_RPAREN))
+ goto error;
+ }
+ }
+ else if (lex_match_id (lexer, "DISTANCE"))
+ {
+ qc.save_values |= SAVE_DISTANCE;
+ if (lex_match (lexer, T_LPAREN))
+ {
+ if (!lex_force_id (lexer))
+ goto error;
+
+ free (qc.var_distance);
+ qc.var_distance = xstrdup (lex_tokcstr (lexer));
+ if (NULL != dict_lookup_var (dataset_dict (ds), qc.var_distance))
+ {
+ lex_error (lexer,
+ _("A variable called `%s' already exists."),
+ qc.var_distance);
+ free (qc.var_distance);
+ qc.var_distance = NULL;
+ goto error;
+ }
+
+ lex_get (lexer);
+
+ if (!lex_force_match (lexer, T_RPAREN))
+ goto error;
+ }
+ }
+ else
+ {
+ lex_error (lexer, _("Expecting %s or %s."),
+ "CLUSTER", "DISTANCE");
+ goto error;
+ }
+ }
+ }