SAS如何删除字符串中左括号及之后内容,仅保留人名部分
SAS实现删除Name字段左括号及后续内容的方法
你之前使用compress()函数达不到需求的原因是:compress()仅能删除字符串内指定的单个字符,无法批量删除左括号之后的所有内容。正确实现逻辑是先定位左括号的首次出现位置,再截取该位置之前的字符串即可。
修改后的完整代码如下:
data output; length Name $30. new_name $30.; infile datalines dlm=','; input Name$ Age; /* 定位第一个左括号的位置 */ bracket_pos = find(Name, '('); if bracket_pos > 0 then do; /* 截取括号前的内容并去掉首尾空格 */ new_name = strip(substr(Name, 1, bracket_pos - 1)); end; else do; /* 没有括号的名字直接保留 */ new_name = strip(Name); end; /* 不需要输出中间变量可drop */ drop bracket_pos; datalines; James,12 John (funny),11 Jonathan,10 Alisa (134 cm),12 Merlin (cheerful),12 Jessica (hopeful),12 Ali (quiet),13 ; run;
处理后得到的new_name字段结果符合需求:
new_name Age James 12 John 11 Jonathan 10 Alisa 12 Merlin 12 Jessica 12 Ali 13
如果需要直接覆盖原Name字段,把代码中的new_name替换为Name即可。
内容的提问来源于stack exchange,提问作者Empowered
相关产品推荐
相关产品推荐

