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

在SAS EG中使用PROC SQL提取特定格式字母数字序列求助

在SAS EG PROC SQL中提取特定格式的大写字母数字字符串

要实现你需要的提取逻辑,核心是把R中rebus构建的模式转换成SAS支持的正则表达式,再通过PROC SQL中的正则函数完成提取。

步骤1:转换正则表达式

你在R中定义的模式对应以下正则规则(仅匹配全大写字母+数字):

  • 1个可选大写字母
  • 2个大写字母
  • 2个数字
  • 2个大写字母
  • 1个可选大写字母
  • 1个数字
  • 1个可选数字
  • 1个可选大写字母

对应的SAS兼容正则表达式为:[A-Z]?[A-Z]{2}\d{2}[A-Z]{2}[A-Z]?\d\d?[A-Z]?

步骤2:PROC SQL实现代码

假设你的源表为source_table,待提取的原字段为raw_string,新字段命名为target_id,可以用两种方式实现:

方式1:使用PRX系列函数(兼容低版本SAS)

PROC SQL;
    CREATE TABLE extracted_table AS
    SELECT 
        raw_string,
        PRXPOSN(PRXPARSE('/[A-Z]?[A-Z]{2}\d{2}[A-Z]{2}[A-Z]?\d\d?[A-Z]?/'), 0, raw_string) AS target_id
    FROM source_table;
QUIT;
  • PRXPARSE:编译正则表达式
  • PRXPOSN:提取匹配到的整个字符串(参数0表示匹配整个正则表达式的结果)

方式2:使用REGEXP_SUBSTR(SAS 9.4及以上版本支持)

如果你的SAS版本支持,这种写法更简洁:

PROC SQL;
    CREATE TABLE extracted_table AS
    SELECT 
        raw_string,
        REGEXP_SUBSTR(raw_string, '[A-Z]?[A-Z]{2}\d{2}[A-Z]{2}[A-Z]?\d\d?[A-Z]?') AS target_id
    FROM source_table;
QUIT;

验证示例

对于以下输入字符串:

  • 'ORDER-ABC01DE02-2024' → 提取结果:ABC01DE02
  • 'INVOICE:ABC01DE02A-NOV' → 提取结果:ABC01DE02A

注意事项

  • 正则仅匹配大写字母,符合你描述的要求
  • 如果原字符串中有多个符合格式的串,上述代码会提取第一个匹配项;若需提取所有匹配项,需结合循环处理
  • 确保源字段中无特殊字符干扰正则匹配(如全角数字/字母,若存在需先转换为半角)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 09:34:52