SAS字符型时间变量转数值型变量失败,求代码优化建议
解决SAS中字符时间转数值的问题
这个问题我碰到过好几次啦,咱们先搞清楚为什么你原来的代码会出问题:你用input(TIME, best4.)的时候,SAS的best. informat根本不认识带冒号:的字符格式,所以自然转出来全是缺失值啦。
给你两种靠谱的解决方法,按需选就行:
方法一:直接替换冒号为小数点(最贴合你的需求)
既然你想要把0:04直接变成0.04这种数值,最直接的方式就是用translate函数把字符里的冒号替换成小数点,再转成数值:
data work.set2; set work.set; /* 把冒号替换成小数点,再转换为数值型变量 */ TIME2 = input(translate(TIME, '.', ':'), best4.); run;
这个方法的好处是完全匹配你要的结果,不管你的时间是0:01还是12:34,替换后都会变成对应的小数形式。
方法二:先转成SAS时间值再换算(适合需要实际时间计算的场景)
如果你其实是想把0:04理解为0小时4分钟或者0分钟4秒,需要转换成真实的时间数值(比如以小时/分钟为单位),可以先把字符转成SAS的时间值(单位是秒),再做换算:
比如把0:04当成分钟:秒,转成以分钟为单位的数值:
data work.set2; set work.set; /* 先转成SAS时间值(秒),再除以60得到分钟为单位的数值 */ time_raw = input(TIME, mmss5.); /* mmss. informat识别分:秒格式 */ TIME2 = time_raw / 60; run;
不过这个方法得到的0:04会是0.0667左右(因为4秒=4/60分钟),如果不是你要的结果,就用第一种方法就好啦。
内容的提问来源于stack exchange,提问作者bree
相关产品推荐
相关产品推荐

