DHMS将日期和时间连接到日期时间导致第一个日期为1960年1月1日

问题描述 投票:0回答: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,可能是我的日期时间变量。

function datetime sas time-series concatenation
1个回答
1
投票

问题似乎与这条条件逻辑有关:

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);

© www.soinside.com 2019 - 2024. All rights reserved.