You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 07:43:52