我正在获取睡眠时间并将其转换为分钟,然后计算不同日期的就寝时间之间的标准偏差。问题是有些日子的就寝时间是在午夜之后。我让它可以在 R 上运行,但需要 SAS 代码。
install.packages("chron")
library(chron)
data <- read.table(text="
sleep_time wake_time
23:30:00 05:30:00
00:00:00 05:30:00
00:30:00 05:35:00
", header=T)
mean(times(data$wake_time))
mean(times(data$sleep_time))
wake<- times(data$wake_time)
sleep <- times(data$sleep_time)
times(mean(ifelse(sleep <wake, sleep+1, sleep)))
sd(ifelse(sleep < wake, sleep+1, sleep) * 24*60)
此代码重现了您在 R 中所做的事情,但需要注意以下几点:
ifn
是 ifelse
的(数字)SAS 版本。这里的单位是秒,所以我们添加 24 x 60 x 60 而不是 1(天)。还有许多其他方法可以有条件地执行此添加。PROC SQL
,但还有很多其他方法来获取摘要统计数据。data times;
input SLEEP TIME. WAKE TIME.;
format SLEEP WAKE TOD8.;
BEDTIME = ifn(sleep < wake, sleep + 24*60*60, sleep);
* works too: BEDTIME = sleep + (sleep < wake)*24*60*60 ;
cards;
23:30:00 05:30:00
00:00:00 05:30:00
00:30:00 05:35:00
;
run;
proc sql;
select mean(bedtime) as M format TOD8., std(bedtime)/60 as S from times;
quit;
* M S ;
* -------------- ;
* 00:00:00 30 ;