У меня есть 2 отметки времени в формате ddmmmyyyyhhmmss
SAS. Как я могу найти минутную разницу между ними?
Я пробовал INTCK fn («минута», дата1, дата2). Это работает. Но временные метки, похоже, имеют ошибки spmeformatting.
У меня есть 2 отметки времени в формате ddmmmyyyyhhmmss
SAS. Как я могу найти минутную разницу между ними?
Я пробовал INTCK fn («минута», дата1, дата2). Это работает. Но временные метки, похоже, имеют ошибки spmeformatting.
Похоже, ваши значения отметки времени являются числовыми переменными со значениями даты и времени. SAS хранит значения времени данных в секундах. Таким образом, вы можете просто вычесть две переменные и разделить на 60 секунд в минуту, чтобы преобразовать единицы из секунд в минуты.
seconds = datetime2 - datetime1 ;
mintues = (datetime2 - datetime1)/60 ;
Вы также можете использовать функцию INTCK() для расчета интервалов в различных единицах даты, времени или даты и времени. По умолчанию подсчитывается количество пересеченных границ интервала, но вы можете указать непрерывный метод, чтобы он вычислял точное количество минут.
minutes = intck('minute',datetime1,datetime2);
minutes = intck('minute',datetime1,datetime2,'continuous');
Пример:
32 data test;
33 datetime1='01JAN2019:00:00:20'dt;
34 datetime2='01JAN2019:00:01:01'dt;
35 seconds=datetime2-datetime1;
36 minutes=(datetime2-datetime1)/60;
37 minutes2=intck('minute',datetime1,datetime2);
38 minutes3=intck('minute',datetime1,datetime2,'continuous');
39 put (_all_) (=/);
40 format datetime: datetime24.3 ;
41 run;
datetime1=01JAN2019:00:00:20.000
datetime2=01JAN2019:00:01:01.000
seconds=41
minutes=0.6833333333
minutes2=1
minutes3=0
Результат INTCK Функция - это разница между двумя датами или датами и временем, измеренными в указанном параметре (год, месяц, день, минута и другие). Поэтому, если вы хотите узнать разницу в минутах, вы должны использовать дату и время, а не даты. Например:
data temp;
format date1-date2 date.;
format date4-date5 datetime.;
date1=mdy(1,1,2019); /*date*/
date2=today(); /*date*/
date3=intck('day',date1,date2); /*difference between date1 and date2 in days*/
date4=dhms(mdy(1,1,2019),0,0,0); /*datetime*/
date5=datetime(); /*datetime*/
date6=intck('minute',date4,date5); /*difference between date4 and date5 in minutes*/
run;
Результат:
+---------+---------+------------------+------------------+-------+--------+
| date1 | date2 | date4 | date5 | date3 | date6 |
+---------+---------+------------------+------------------+-------+--------+
| 01JAN19 | 03DEC19 | 01JAN19:00:00:00 | 03DEC19:11:33:52 | 336 | 484533 |
+---------+---------+------------------+------------------+-------+--------+
Или, если вам нужен отформатированный результат, вы можете использовать intck, чтобы узнать разницу в секундах, например:
data temp;
format date1 date2 datetime.
date3 time.;
date1=datetime();
date2=dhms(mdy(1,1,2019),0,0,0);
date3=intck('second',date2,date1); /*it will work cause time represent in sas as num of seconds*/
run;
Результат:
+------------------+------------------+---------+
| date1 | date2 | date3 |
+------------------+------------------+---------+
| 01DEC19:00:00:00 | 01JAN19:00:00:00 | 8016:00 |
+------------------+------------------+---------+
ddmmmyyyyhhmmss
SAS. Это две числовые переменные, которые SAS будет отображать в форматеddmmmyyyyhhmmss
, или это двухсимвольная переменная, которую можно прочитать в форматеddmmmyyyyhhmmss
? Если вы меня не понимаете, вставьте выводproc contents data=<your dataset>; run;
в свой вопрос (с отступом в 4 позиции). - person Dirk Horsten   schedule 03.12.2019