如何从SAS字符变量中移除指定葡萄牙语姓名前缀词?
SAS去除葡萄牙语姓名前缀的解决方案
你的代码问题在于compress函数是删除指定单个字符,而非完整单词,这会错误删除姓名中包含这些字母的部分,同时substr(...,2)会误删字符串首字符。要精准删除DA、DO、DE、DAS、DOS这些完整前缀单词,推荐使用SAS正则表达式函数PRXCHANGE,以下是正确实现代码:
data want; set have; /* 匹配并删除所有独立的葡萄牙语前缀单词 */ NEW_NAMES = prxchange('s/\b(DA|DO|DE|DAS|DOS)\b//i', -1, NAMES); /* 清理多余空格,保证格式整洁 */ NEW_NAMES = strip(compbl(NEW_NAMES)); run;
代码说明:
\b:单词边界标记,确保仅匹配独立的前缀单词(例如不会误删DOSOMEDE中的DOS部分)(DA|DO|DE|DAS|DOS):需要删除的前缀列表,用|分隔多个匹配项//i:忽略大小写,兼容数据中可能存在的小写前缀-1:表示替换所有匹配到的内容,而非仅第一个compbl:将多个连续空格合并为单个空格,strip去除首尾空格,避免删除前缀后出现多余空格
运行上述代码后,生成的NEW_NAMES变量将完全符合你期望的结果。
内容的提问来源于stack exchange,提问作者LuizZ
相关产品推荐
相关产品推荐

