SAS中正则表达式匹配个数

  • 本文关键字:正则表达式 SAS regex sas
  • 更新时间 :
  • 英文 :


如果您能帮助我计算SAS中正则表达式函数的匹配次数,我将不胜感激。我需要计算一个金融交易在文本字符串中出现的次数。

我已经能够编写表达式来查找事务,但无法计算它可能出现在字符串中的次数。为了说明,我创建了以下表格:

DATA Transactions;
infile datalines dlm='  ';
INPUT ID STRING $40.;
DATALINES;
1   One transaction R$250
2   One instance of R$ 250 and one of R$ 200
3   Nothing to see here R$
;
RUN;

我已经创建了一个变量,可以检查是否存在交易。

DATA Want;
Set Transactions;
QtdMatch = PRXMATCH("/ R$ ?d+/",String);
RUN;

然而,我需要的是一个计算事务数的变量。因此,在第一个字符串中,变量将读取1,对于第二个字符串为2,对于最后一个示例为0。我的字符串最多可以包含50个需要计数的事务。

可以使用call prxnext遍历所有匹配项。此解决方案改编自CALL PRXNEXT上的SAS文档。

data want;
set transactions;
regex        = prxparse("/ R$ ?d+/");
stop         = length(string);
transactions = 0;
call prxnext(regex, 1, stop, string, position, length);
do while (position > 0);
transactions+1;
call prxnext(regex, 1, stop, string, position, length);
end;
run;

输出:

ID  STRING                                      transactions
1   One transaction R$250                       1
2   One instance of R$ 250 and one of R$ 250    2
3   Nothing to see here R$                      0