Найдите разницу в минутах между двумя отметками времени в формате ddmmmyyyyhhmmss SAS

У меня есть 2 отметки времени в формате ddmmmyyyyhhmmss SAS. Как я могу найти минутную разницу между ними?

Я пробовал INTCK fn («минута», дата1, дата2). Это работает. Но временные метки, похоже, имеют ошибки spmeformatting.


person Aishwarya Kumar    schedule 03.12.2019    source источник
comment
Добро пожаловать в Stackoverflow. Укажите, какие ошибки форматирования вы получаете, чтобы другие могли посмотреть на них и попытаться исправить.   -  person octobus    schedule 03.12.2019
comment
Вы пишете, что у вас есть 2 метки времени в формате ddmmmyyyyhhmmss SAS. Это две числовые переменные, которые SAS будет отображать в формате ddmmmyyyyhhmmss, или это двухсимвольная переменная, которую можно прочитать в формате ddmmmyyyyhhmmss? Если вы меня не понимаете, вставьте вывод proc contents data=<your dataset>; run; в свой вопрос (с отступом в 4 позиции).   -  person Dirk Horsten    schedule 03.12.2019


Ответы (2)


Похоже, ваши значения отметки времени являются числовыми переменными со значениями даты и времени. 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
person Tom    schedule 03.12.2019

Результат 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 |
+------------------+------------------+---------+
person Alexey Sigida    schedule 03.12.2019