date - SAS:将 date_from 和 date_to 分隔成单独的行
问题描述
我有一个这样的例子:
data date_table;
stop;
length id $32.;
length name $32.;
length date_from date_to 8.;
format date_from date_to datetime19.;
run;
proc sql;
insert into date_table
values ('1', 'Mark', '13Jun2019 08:39:00'dt, '13Jun2019 11:39:00'dt)
values ('2', 'Bart', '13Jun2019 13:39:00'dt, '13Jun2019 17:39:00'dt);
quit;
我需要一些智能连接(可能有单独的小时映射表)来实现这样的事情:
我现在一直在尝试的是使用映射表
并加入:
proc sql;
create table testing as
select t1.id,
t1.name,
t1.date_from,
t1.date_to
from DATE_TABLE t1 inner join
WORK.CAL_TIME t2 on t1.date_from >= t2.Time and
t1.date_to <= t2.Time;
quit;
但当然结果是空表,因为日期 dpoens 不想加入。我可能会将 date_from 和 date_to 减少到完整小时,但这样的加入仍然不起作用。
帮助。
解决方案
看起来您正在将苹果 (DATETIME) 与橙子 (TIME) 进行比较。这些数字的数量级完全不同。
684 data _null_;
685
686 dt = '13Jun2019 08:39:00'dt ;
687 tm = '08:00't ;
688 put (dt tm) (=comma20.);
689 run;
dt=1,876,034,340 tm=28,800
您可能只想将日期时间值的时间部分与时间值进行比较。还要将您的开始时间向下舍入,将结束时间向上舍入到小时。
data date_table;
length id name $32 date_from date_to 8;
format date_from date_to datetime19.;
input id name (date:) (:datetime.);
cards;
1 Mark 13Jun2019:08:39:00 13Jun2019:11:39:00
2 Bart 13Jun2019:13:39:00 13Jun2019:17:39:00
;
data cal_time;
do time='08:00't to '21:00't by '01:00't ;
output;
end;
format time time5.;
run;
proc sql;
create table testing as
select t1.id
, t1.name
, max(t1.date_from,dhms(datepart(t1.date_from),0,0,t2.time))
as datetime_from format=datetime19.
, min(t1.date_to,dhms(datepart(t1.date_to),0,0,t2.time+'01:00't))
as datetime_to format=datetime19.
, t2.time
from DATE_TABLE t1
inner join WORK.CAL_TIME t2
on t2.time between intnx('hour',timepart(t1.date_from),0,'b')
and intnx('hour',timepart(t1.date_to),0,'e')
;
quit;
结果
Obs id name datetime_from datetime_to time
1 1 Mark 13JUN2019:08:39:00 13JUN2019:09:00:00 8:00
2 1 Mark 13JUN2019:09:00:00 13JUN2019:10:00:00 9:00
3 1 Mark 13JUN2019:10:00:00 13JUN2019:11:00:00 10:00
4 1 Mark 13JUN2019:11:00:00 13JUN2019:11:39:00 11:00
5 2 Bart 13JUN2019:13:39:00 13JUN2019:14:00:00 13:00
6 2 Bart 13JUN2019:14:00:00 13JUN2019:15:00:00 14:00
7 2 Bart 13JUN2019:15:00:00 13JUN2019:16:00:00 15:00
8 2 Bart 13JUN2019:16:00:00 13JUN2019:17:00:00 16:00
9 2 Bart 13JUN2019:17:00:00 13JUN2019:17:39:00 17:00
推荐阅读
- reactjs - 在反应中获取后未设置数据
- html - 为什么 boostrap 轮播不显示图像(甚至不显示占位符)?
- javascript - Firebase 函数:http 函数无法读取正文或标头
- android - 将文件结构表示为 JSON
- node.js - 用 mocha/sinon 模拟 es6 类构造函数属性
- javascript - 如何减少由多个请求引起的加载时间
- android - 如何在 Android Studio 中首次使用 xml 文件初始化 Shared Preferences 值
- python - 我将如何使用 python3 在网站中查找特定链接
- json - Flutter Dart Http XML rest 转换为 Json
- flutter - 如何在 Flutter 中实现这样的 UI?