PRXMATCH无法与SAS中的PRXPARSE功能一起使用

时间:2020-06-16 07:14:34

标签: regex sas pattern-mining

我有多个ID的注释,需要从注释中提取。我需要在单独的栏中输入内容。

输入数据有2列-comment_id和Comment(具有1个或多个ID)

所需的输出应包含2列:comment_id和ID

我正在使用以下功能。

用于解析

data work.comments_parsed;
set work.comments;
if _N_ = 1 then do;
    pasre_id=prxparse("/ab[c|d]?e?\d+/");
end;
retain pasre_id;
start = 1;
stops = length(Comment);
run;

用于生成输出

data work.desired_output;
set work.comments_parsed;
length ID $ 500;
call prxnext(pasre_id, start, stops, Comment, pos, len);
do while (pos >0);
    ID = substr(Comment,pos,len);
    output;
    call prxnext(pasre_id, start, stops, Comment, pos, len);
end;
run;

错误:函数PRXNEXT的参数1必须是PRXPARSE为有效模式返回的正整数。 错误:在功能PRXNEXT中检测到内部错误。 DATA步骤在EXECUTION阶段结束。

我相信错误是由于不正确的解析,但是当我通过直接使用正则表达式使用prxmatch函数时,我得到了正确的匹配。有人可以建议我如何使此代码起作用。

此代码可以正常工作

data pattern_testing;
set work.comments_parsed;
pos = prxmatch("/ab[c|d]?e?\d+?/", Comment);
run;

但是此代码也给出了相同的错误:

data pattern_testing;
set work.comments_parsed;
pos = prxmatch(pasre_id,Comment);
run;

1 个答案:

答案 0 :(得分:0)

当我在同一数据步骤中解析和prxnext时,代码有效。

data work.comments_parsed;
set work.comments;

if _N_ = 1 then pasre_id = prxparse("/ab[c|d]?e?\d+/");
retain pasre_id;
length gen_string $ 500;
call prxnext(pasre_id, start, stops, COMMENT, pos, len);
do while (pos >0);
    gen_string = substr(LAST_COMMENT,pos,len);
    output;
    call prxnext(pasre_id, start, stops, LAST_COMMENT, pos, len);
end;
run;