如何将带逗号的SAS字符型数值变量转换为数值型
解决SAS中字符型变量逗号转小数点并转数值的问题
先排查你之前用translate失败的核心原因:大概率是参数顺序搞反了。translate的语法是**translate(源字符串, 要替换成的字符, 被替换的字符)**,如果你写成了translate(变量, ',', '.'),那肯定不会替换逗号,得写成translate(变量, '.', ',')才对。
如果确认参数顺序没错还是不行,试试下面这些方法:
用
tranwrd精准替换逗号tranwrd是专门替换字符串的函数,比translate更适合单字符替换的场景,避免字符编码的干扰:data want; set have; /* 替换半角逗号为小数点 */ fixed_char = tranwrd(your_char_var, ',', '.'); /* 转换为数值型变量 */ num_var = input(fixed_char, best32.); drop fixed_char; run;如果你的逗号是全角逗号(比如中文输入法下的
,),直接把代码里的逗号换成全角的就行:tranwrd(your_char_var, ',', '.')先清理干扰字符再转换
如果变量里除了逗号还有其他非数字字符(比如空格、特殊符号),先清理掉再替换:data want; set have; /* 只保留数字和逗号,去掉其他所有字符 */ clean_char = compress(your_char_var, , 'kd'); /* 替换逗号为小数点 */ clean_char = tranwrd(clean_char, ',', '.'); /* 转数值 */ num_var = input(clean_char, best32.); drop clean_char; run;排查字符真实编码
要是以上方法都没用,说明你的逗号可能是特殊编码的字符(比如不可见字符)。用put函数输出十六进制编码看看:data check; set have; hex_code = put(your_char_var, $hex.); run;半角逗号的十六进制是
2C,全角逗号是A3AC。找到对应编码后,用translate或者tranwrd替换这个编码对应的字符就行。
内容的提问来源于stack exchange,提问作者NewUsr_stat
相关产品推荐
相关产品推荐

