SAS PROC SQL; - создание переменной DateTime
Я пытаюсь создать переменную datetime за последние 3 часа... путем объединения DATE
переменная (в формате DATE) и time
переменная (строка чч: мм: сс) в PROC SQL;
Буду очень признателен за любую помощь в этом!
Пример:
APPLCTN_DT = 05NOV2018:00:00:00.000
APPLCTN_TM = 20:04:57
Я хотел бы создать числовой DATETIME
поле на основе выше
3 ответа
Поскольку, похоже, ваша переменная "date" действительно является переменной DATETIME с нулевым временем, вы, возможно, можете просто добавить к ней часть времени?
new_datetime = APPLCTN_DT + input(APPLCTN_TM,time8.);
Или, чтобы быть в безопасности, вы могли бы принудительно установить временную часть значения datetime на ноль, прежде чем добавлять временную часть. Вот несколько способов.
new_datetime = dhms(datepart(APPLCTN_DT),0,0,input(APPLCTN_TM,time8.));
new_datetime = intnx('dtdate',APPLCTN_DT,0) + input(APPLCTN_TM,time8.);
На самом деле, ваш код близок к результату, я думаю, вы забыли перевести формат даты SAS в формат отображения.
используя функцию put в переменной target_minus_3hr_dt & target_minus_3hr_exact_dt, поскольку дата SAS отображается в виде числа, поэтому нам необходимо использовать функцию put для передачи.
data _null_;
APPLCTN_DT = '05NOV2018:00:00:00.000'dt ;
APPLCTN_TM = "20:04:57";
date_part = datepart(applctn_dt);
time_part = input(applctn_tm,time8.);
target_dt = put(date_part,date9.)||applctn_tm;
target_minus_3hr_dt = put((intnx ('dthour'
, dhms(date_part,0,0,0) + time_part
, -3
)),datetime20.);
target_minus_3hr_exact_dt = put((intnx ('dtsecond'
, dhms(date_part,0,0,0) + time_part
, -3*60*60
)),datetime20.);
put target_dt ' combined';
put target_minus_3hr_dt ' combined, 3 hours ago';
put target_minus_3hr_exact_dt ' combine, exactly three hours ago (to the second)';
run;
Предполагая, что переменная _DT на самом деле является значением даты и времени без точной части времени (таким образом, только дата)).
использование DATEPART
извлечь значение даты SAS, INPUT
преобразовать строку времени в значение времени, DHMS
построить целевое значение даты и времени INTNX
вычислить новое смещение значения даты и времени от цели.
data _null_;
APPLCTN_DT = '05NOV2018:00:00:00.000'dt ;
APPLCTN_TM = "20:04:57";
date_part = datepart(applctn_dt);
time_part = input(applctn_tm,time8.);
target_dt = dhms(date_part,0,0,0) + time_part;
target_minus_3hr_dt = intnx ('dthour'
, dhms(date_part,0,0,0) + time_part
, -3
);
target_minus_3hr_exact_dt = intnx ('dtsecond'
, dhms(date_part,0,0,0) + time_part
, -3*60*60
);
format target: datetime20.;
put target_dt ' combined';
put target_minus_3hr_dt ' combined, 3 hours ago';
put target_minus_3hr_exact_dt ' combine, exactly three hours ago (to the second)';
run;
Покажет в логе
05NOV2018:20:04:57 combined
05NOV2018:17:00:00 combined, 3 hours ago
05NOV2018:17:04:57 combine, exactly three hours ago (to the second)