解决了。见脚注。
/*check regex*/
go = 1;
i = 1;
do while (go = 1);
set braw.regex point = i;
if (upcase(fname) = upcase("&var.")) then do;
put format1 " one"; /*format1 is a field of braw.regex, properties says character length 30*/
if format1 = '/\d{8}/' then put 'hello world one'; else put 'good bye world one';
%check1(&data, format1, &var)
end;
else i = i+1;
end;
/*check1 passes regex, string, true false to check_format*/
%macro check_format(regex, string, truefalse);
pattern = prxparse(®ex.);
truefalse = prxmatch(pattern, &string);
put ®ex " " &string " " &truefalse "post";
%mend;
很抱歉缺少缩进 - 堆栈流似乎有问题或其他东西。
这输出
/\d{8}/ one
good bye world one
显然格式不是字符串。因此它会失败 prxparse,因为它正在寻找字符串输入。知道我做什么吗?
我在想我可以使用一个宏变量在它周围加上引号,也许使用:
call symput('mymacrovar', format1);
%let mymacrovar = "&mymacrovar";
但那个 symput 什么也没做。
已解决: 它被读取为字符串。在从中读取正则表达式数据集的 CSV 文件中,逗号之间有额外的空格,从而使字符串“/\d{8}/”成为 prxparse 不喜欢的。