我有多个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;
答案 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;