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

求SAS代码:计算含跨午夜时段的就寝时间标准差(附R实现代码)

对应需求的SAS实现代码

以下是实现你需求的SAS代码,逻辑和你提供的R代码完全对齐,解决午夜后就寝时间的处理问题:

/* 创建示例数据集,模拟就寝/起床时间数据 */
data sleep_data;
    input sleep_time TIME8. wake_time TIME8.;
    format sleep_time wake_time TIME8.;
    datalines;
23:30:00 05:30:00
00:00:00 05:30:00
00:30:00 05:35:00
;
run;

/* 处理跨午夜的就寝时间:若就寝时间早于起床时间,视为前一天的时间,加上一天的秒数(24*3600) */
data sleep_adjust;
    set sleep_data;
    if sleep_time < wake_time then sleep_adjust = sleep_time + 24*3600;
    else sleep_adjust = sleep_time;
    /* 将调整后的时间转成分钟数,用于后续标准差计算 */
    sleep_minutes = sleep_adjust / 60;
    format sleep_adjust TIME8.;
run;

/* 计算起床时间均值、原始就寝时间均值 */
proc means data=sleep_data mean noprint;
    var sleep_time wake_time;
    output out=mean_stats mean=mean_sleep mean_wake;
run;

data mean_display;
    set mean_stats;
    format mean_sleep mean_wake TIME8.;
    put "原始就寝时间均值: " mean_sleep;
    put "起床时间均值: " mean_wake;
run;

/* 计算调整后就寝时间的均值 */
proc means data=sleep_adjust mean noprint;
    var sleep_adjust;
    output out=adjust_mean mean=mean_sleep_adjust;
run;

data adjust_mean_display;
    set adjust_mean;
    /* 对均值取模24小时,得到符合日常格式的时间结果 */
    mean_sleep_final = mod(mean_sleep_adjust, 24*3600);
    format mean_sleep_final TIME8.;
    put "调整后就寝时间均值: " mean_sleep_final;
run;

/* 计算就寝时间分钟数的标准差 */
proc means data=sleep_adjust std noprint;
    var sleep_minutes;
    output out=sd_stats std=sleep_sd_minutes;
run;

data sd_display;
    set sd_stats;
    put "就寝时间分钟数的标准差: " sleep_sd_minutes;
run;

关键逻辑说明

  • SAS中时间以秒为存储单位,处理跨午夜时间时,给早于起床时间的就寝时间加上24*3600(一天的秒数),和R中sleep+1(chron包中times是0-1的日比例)逻辑完全匹配。
  • 转换为分钟数时,只需将调整后的时间秒数除以60即可。
  • 调整后就寝时间的均值可能超过24小时,用mod函数取模24小时,得到符合日常认知的时间表示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 22:25:23