Find the minute difference between 2 time stamps in ddmmmyyyyhhmmss SAS format

3.8k Views Asked by At

I have 2 time stamps in ddmmmyyyyhhmmss SAS format. How can I find the minute difference between the two?

I have tried the INTCK fn ('minute', date1, date2). It is working. But the time stamps seems to have spmeformatting errors.

2

There are 2 best solutions below

0
On

Looks like your time stamp values are numeric variables with datetime values. SAS stores datatime values in seconds. So you could just subtract the two variables and divide by 60 seconds/minute to convert the units from seconds to minutes.

seconds = datetime2 - datetime1 ;
mintues = (datetime2 - datetime1)/60 ;

You can also use the INTCK() function to calculate intervals in a number of different date, time or datetime units. The default is to count the number of interval boundaries crossed but you can specify the continuous method to have it calculate exact number of minutes.

minutes = intck('minute',datetime1,datetime2);
minutes = intck('minute',datetime1,datetime2,'continuous');

Example:

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
0
On

Result of INTCK function is difference between two dates or datetimes that measured in specified parameter(year,month,day,minute and other). So if you want to know difference in minutes, you should use datetimes, not dates. For example:

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;

Result:

+---------+---------+------------------+------------------+-------+--------+
|  date1  |  date2  |      date4       |      date5       | date3 | date6  |
+---------+---------+------------------+------------------+-------+--------+
| 01JAN19 | 03DEC19 | 01JAN19:00:00:00 | 03DEC19:11:33:52 |   336 | 484533 |
+---------+---------+------------------+------------------+-------+--------+

Or if you want formated result, you can use intck to know the difference in seconds, for example:

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;

Result:

+------------------+------------------+---------+
|      date1       |      date2       |  date3  |
+------------------+------------------+---------+
| 01DEC19:00:00:00 | 01JAN19:00:00:00 | 8016:00 |
+------------------+------------------+---------+