+int
+cmd_variable_role (struct lexer *lexer, struct dataset *ds)
+{
+ do
+ {
+ if (!lex_force_match (lexer, T_SLASH))
+ return CMD_FAILURE;
+
+ enum var_role role;
+ if (lex_match_id (lexer, "INPUT"))
+ role = ROLE_INPUT;
+ else if (lex_match_id (lexer, "TARGET"))
+ role = ROLE_TARGET;
+ else if (lex_match_id (lexer, "BOTH"))
+ role = ROLE_BOTH;
+ else if (lex_match_id (lexer, "NONE"))
+ role = ROLE_NONE;
+ else if (lex_match_id (lexer, "PARTITION"))
+ role = ROLE_PARTITION;
+ else if (lex_match_id (lexer, "SPLIT"))
+ role = ROLE_SPLIT;
+ else
+ {
+ lex_error_expecting (lexer, "INPUT", "TARGET", "BOTH",
+ "NONE", "PARTITION", "SPLIT");
+ return CMD_FAILURE;
+ }
+
+ struct variable **v;
+ size_t nv;
+ if (!parse_variables (lexer, dataset_dict (ds), &v, &nv, PV_NONE))
+ return CMD_FAILURE;
+
+ for (size_t i = 0; i < nv; i++)
+ var_set_role (v[i], role);
+
+ free (v);