DHMS将日期和时间连接到日期时间导致第一个日期为1960年1月1日
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DHMS将日期和时间连接到日期时间导致第一个日期为1960年1月1日相关的知识,希望对你有一定的参考价值。
我正在创建一个时间序列的日内(1分钟间隔)时间序列。我有变量日期YYYYMMDD和时间HH:MM:SS并且想要创建日期时间YYYYMMDDTHH:MM:SS(或任何格式不太重要)。
查看输出时(只是示例日期):
Date Time Datetime
20000101 9:30:00 1960-01-01T09:30:00
20000101 9:31:00 2000-01-01T09:31:00
.
.
.
20000102 9:30:00 1960-01-01T09:30:00
20000102 9:31:00 2000-01-02T09:31:00
因此,每当时间是9:30:00时,通过dhms(日期,0,0,时间)连接会给出错误的值。
我的代码实际上从较高频率的数据中选择特定区间的股票价格:
data xtemp2;
set _v_&tables;
by symbol date time;
format datetime e8601dt. itime rtime time12.;
if first.symbol = 1 or first.date = 1 then do;
/* Initialize time and price when new symbol or date starts; */
rtime = time;
iprice = bid;
oprice = ofr;
itime = &start_time;
datetime = time;
end;
if time >= itime then do;
output;
itime = itime + &interval_seconds;
do while(time >= itime);
output;
itime = itime + &interval_seconds;
end;
end;
rtime = time;
iprice = bid;
oprice = ofr;
datetime = dhms(date, 0,0,itime);
retain itime datetime iprice oprice;
run;
这是我的代码中的东西吗?因为查看不同的日期和时间变量会显示正确的日期。
我想结合这些,因为我有每个股票的时间序列,并希望匹配合并它们 - 如果我理解正确 - 需要一个唯一的ID,可能是我的日期时间变量。
答案
问题似乎与这条条件逻辑有关:
if first.symbol = 1 or first.date = 1 then do;
这意味着组的第一个实例将执行datetime = time;
而不是datetime = dhms(date, 0,0,itime);
(假设time >= itime
为真)。
我建议首先用datetime = time;
替换datetime = dhms(date, 0,0,itime);
。
以上是关于DHMS将日期和时间连接到日期时间导致第一个日期为1960年1月1日的主要内容,如果未能解决你的问题,请参考以下文章