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

SAS中时间变量转数值及睡眠时长分类错误问题咨询

问题根因

你遇到的分类错误核心是跨天睡眠的时间差值计算逻辑疏漏:
SAS的时间型变量底层存储是当日0点以来的秒数,如果你入睡时间是前一天、起床是第二天,直接用waketime - bedtime计算得到的是负数,而非你看到的格式化显示的正值时长,负数自然会被判定为小于7小时,才会出现9小时睡眠被错误赋值sleep=1的问题。你之前看到sleeptime显示为09:00:00是变量格式化的效果,底层实际存储的负数在按时间格式展示时会自动加86400(一天总秒数)显示为当天的时间,但比较判断时用的是底层存储的秒数,才会出现显示和判断结果不一致的情况。


方案1:修正时间差值计算后直接分类

先处理跨天的差值,再做分类判断即可:

data have;
    set want;
    * 计算睡眠秒数,跨天则加1天的总秒数86400;
    sleeptime = waketime - bedtime;
    if sleeptime < 0 then sleeptime = sleeptime + 86400;
    * 直接用秒数判断,7小时等于25200秒;
    if sleeptime >= 25200 then sleep=0;
    else sleep=1;
run;

方案2:转换为小时数值再分类

如果需要保留以小时为单位的数值字段,在修正差值后除以3600即可:

data have;
    set want;
    sleeptime = waketime - bedtime;
    if sleeptime < 0 then sleeptime = sleeptime + 86400;
    * 转换为小时,保留位数可根据需求调整;
    sleeptime1 = round(sleeptime / 3600, 0.1);
    if sleeptime1 >=7 then sleep=0;
    else sleep=1;
run;

内容的提问来源于stack exchange,提问作者elemarles

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 05:15:08