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日的主要内容,如果未能解决你的问题,请参考以下文章

SAS宏以dhms格式表示日期

尝试构建 JSON 文件,但将日期时间错误连接到字符串

SQL 将库存计数表连接到日期表

将SQL查询出的日期更改格式

日期应该存储为日期时间还是 SQL 中的 int?

Redshift:将时间戳转换为特定时区的日期