0

我有多个 id 的评论,我需要从评论中提取。每个 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;
4

1 回答 1

0

Code works when I have parsing and prxnext in same data step.

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;
于 2020-06-16T12:37:07.623 回答