如果您能帮助我计算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