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

如何将SAS数据集的姓名列拆分为名字与其余信息两列

如何将SAS数据集的姓名列拆分为名字与其余信息两列

嘿,我来帮你搞定这个拆分需求!你需要把姓名列里的第一个名字单独拎出来,剩下的内容不管是标点、多空格还是其他格式都原封不动保留,对吧?这在SAS里有几种简单可靠的实现方式,我给你详细说说:

方法一:用FIND+SUBSTR精准拆分(推荐)

这是最直接高效的方式,通过定位第一个空格的位置来拆分两列,完美保留剩余内容的所有原始格式:

data nurse_split;
    set nurse_0;
    /* 找到字符串中第一个空格的位置 */
    first_space_pos = find(nms, ' ');
    /* 提取第一个名字:从开头到第一个空格前的部分 */
    first_nm = substr(nms, 1, first_space_pos - 1);
    /* 提取剩余内容:从第一个空格的下一个字符开始到结尾 */
    last_nm = substr(nms, first_space_pos + 1);
    /* 删掉临时变量,让数据集更干净 */
    drop first_space_pos;
run;

为什么这个方法好用?

  • 不管第一个名字后面是1个空格还是多个空格,FIND都能精准定位到第一个空格的位置,确保last_nm开头不会带多余空格,完全匹配你想要的结果;
  • 剩余内容里的逗号、多空格、后缀(比如BSN、RN)都会原封不动保留,和你给出的示例完全一致。

方法二:用正则表达式灵活处理

如果之后遇到更复杂的姓名格式,正则表达式会更灵活,比如处理中间有特殊字符的情况,这里也给你提供一个实现方式:

data nurse_split_regex;
    set nurse_0;
    /* 定义正则表达式:捕获第一个非空白单词,以及后面的所有内容 */
    regex = prxparse('/^(\S+)\s+(.*)$/');
    if prxmatch(regex, nms) then do;
        first_nm = prxposn(regex, 1, nms); /* 提取第一个捕获组(第一个名字) */
        last_nm = prxposn(regex, 2, nms);  /* 提取第二个捕获组(剩余内容) */
    end;
    drop regex;
run;

这个方法通过正则表达式的捕获组来拆分,逻辑清晰,适合应对多变的文本格式,但对于你当前的简单场景,第一种方法已经足够好用啦。

你可以直接把上面的代码复制到SAS里运行,就能得到你想要的first_nm和last_nm两列啦!

备注:内容来源于stack exchange,提问作者jeff

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.16 07:35:28