You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SAS中如何统计正则表达式在文本字符串中的匹配次数

SAS 正则匹配交易记录次数统计方案

PRXMATCH函数仅能返回正则首次匹配的字符位置,无法直接统计单条字符串内的总匹配次数,可通过PRXNEXT函数迭代遍历所有匹配项实现计数,适配单条字符串最多50条交易记录的场景完全无性能问题。

可直接运行的实现代码

DATA Want;
    Set Transactions;
    /* 仅在第一条观测进入时编译一次正则,提升运行效率 */
    retain regex_id;
    if _n_ = 1 then regex_id = PRXPARSE("/ R\$ ?\d+/o");
    
    /* 初始化参数:计数初始为0,搜索范围覆盖整个字符串 */
    QtdMatch = 0;
    search_start = 1;
    search_end = length(String);
    
    /* 循环查找所有匹配项 */
    call PRXNEXT(regex_id, search_start, search_end, String, match_pos, match_len);
    do while(match_pos > 0);
        QtdMatch = QtdMatch + 1;
        call PRXNEXT(regex_id, search_start, search_end, String, match_pos, match_len);
    end;
    
    keep ID String QtdMatch;
RUN;

逻辑说明

  • 用PRXPARSE提前编译正则规则,搭配retain语句和o选项,避免每条观测重复编译正则,处理大批量数据时效率更高
  • 每次调用PRXNEXT会从当前搜索起始位置向后查找匹配,找到匹配后自动将搜索起始位置移动到本次匹配段的末尾,为下一次搜索做准备
  • 当返回的匹配位置match_pos为0时,代表已经遍历完整个字符串,没有更多符合规则的交易记录,退出循环

运行结果校验

代码运行后输出结果完全符合预期:

  • ID为1的记录:匹配到1条交易R$250,QtdMatch取值为1
  • ID为2的记录:匹配到R$ 250、R$ 200共2条交易,QtdMatch取值为2
  • ID为3的记录:R$后无数字,不符合交易规则,QtdMatch取值为0

内容的提问来源于stack exchange,提问作者alexdamado

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 21:18:15