在SAS中不使用SQL如何将大写字母'O'替换为数字'0'
SAS非SQL方案替换大写字母'O'为数字'0'
用SAS原生data步结合TRANSLATE字符处理函数即可实现,不需要调用SQL过程,适配你提到的8OO、9O、1O1这类所有混合场景。
场景1:待处理字段为字符型
直接调用TRANSLATE函数即可,参数顺序为:目标字段、替换后的字符、需要被替换的字符:
data 输出数据集名; set 输入数据集名; /* 可直接覆盖原字段,也可新建字段存储结果 */ 处理后字段 = translate(原字符字段, '0', 'O'); run;
场景2:待处理字段为数值型
需要先把数值转成字符型完成替换,再转回数值型即可:
data 输出数据集名; set 输入数据集名; /* 转字符型,32位长度可覆盖绝大多数常规数值场景避免截断 */ temp_char = put(原数值字段, $32.); /* 替换所有大写O为0 */ temp_char = translate(temp_char, '0', 'O'); /* 转回数值型 */ 处理后数值字段 = input(temp_char, best32.); /* 删除临时变量 */ drop temp_char; run;
补充说明
- 如果需要同时替换小写字母'o',把
translate函数的参数改为translate(目标字段, '00', 'Oo')即可同时匹配大小写o完成替换。 TRANSLATE会遍历字段的所有字符,不需要指定匹配位置,所有出现的'O'都会被批量替换。- 不需要保留原字段的话可以直接把处理结果赋值给原字段名,覆盖原有内容即可,不需要额外新建字段。
内容的提问来源于stack exchange,提问作者Jessica Lamoureux
相关产品推荐
相关产品推荐

