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

如何在SAS Enterprise Guide的PROC SQL中删除_M2及之后的字符?

修改PROC SQL语句实现字段内容截取

根据你给出的示例数据和期望结果,核心需求是去掉COL1字段中最后一个下划线及之后的所有字符,以下是几种可行的修改方案:

方案一:使用正则表达式(最灵活)

利用SAS的PRXCHANGE函数匹配并替换最后一个下划线及后续内容:

proc sql;
create table work.table1 as 
select 
    prxchange('s/_[^_]*$//', 1, COL1) as COL1,
    COL2
from my_table
;quit;

说明:

  • 正则表达式 s/_[^_]*$// 的含义:
    • _ 匹配目标下划线
    • [^_]* 匹配下划线之后所有非下划线的字符
    • $ 表示匹配字符串末尾
    • 整体作用是把最后一个下划线及后面的内容替换为空

方案二:通过反转字符串定位最后一个下划线

先反转字符串找到第一个下划线的位置(对应原字符串的最后一个下划线),再截取前面的内容:

proc sql;
create table work.table1 as 
select 
    substr(COL1, 1, length(COL1) - index(reverse(COL1), '_')) as COL1,
    COL2
from my_table
;quit;

说明:

  • reverse(COL1):将COL1内容反转,比如A_MON_P2022变成2202P_NOM_A
  • index(...):找到反转后字符串中第一个下划线的位置(对应原字符串最后一个下划线的位置)
  • length(COL1) - 该位置:计算需要保留的原字符串长度,再用substr截取

特殊情况处理:若需仅删除从"_M2"开头的后缀

如果确实是只删除从_M2开始到末尾的内容(而非所有最后下划线后缀),可以用条件判断结合字符串截取:

proc sql;
create table work.table1 as 
select 
    case 
        when index(COL1, '_M2') > 0 then substr(COL1, 1, index(COL1, '_M2') - 1)
        else COL1
    end as COL1,
    COL2
from my_table
;quit;

说明:

  • index(COL1, '_M2'):查找_M2在COL1中的起始位置
  • 若找到则截取该位置之前的内容,否则保留原字段内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 10:05:20