Help using Base SAS procedures

How to round up a date to nearest second

Accepted Solution Solved
Reply
Frequent Contributor
Posts: 82
Accepted Solution

How to round up a date to nearest second

What function can I use to change:

2014-07-09 11:42:34:826  -->

2014-07-09 11:42:35:000

i.e  round the millisecond to the nearest second and put 000 in the millisecond portion. I need to use the rounded value in a join condition.


Accepted Solutions
Solution
‎07-10-2014 04:36 PM
SAS Employee
Posts: 15

Re: How to round up a date to nearest second

Posted in reply to eagles_dare13

Hello eagles_dare13,

If your input data is consistently the same length (23 characters) and formatted as your example data, maybe try:

data have;

  infile datalines delimiter=',';

  format

    dt $23.;

  input dt;

datalines;

2014-07-09 11:42:34:826

;

run;

data want;

  set have;

  format

    dt2 e8601dt23.3;

  substr(dt,20,1)='.';

  put dt=;

  dt2=input(dt,e8601dt23.3);

  dt2=ceil(dt2);

  put dt2=;

run;

View solution in original post


All Replies
Super User
Posts: 19,822

Re: How to round up a date to nearest second

Posted in reply to eagles_dare13

I think the milliseconds come from the decimal point so try rounding to the nearest digit

round(time, 1)

Solution
‎07-10-2014 04:36 PM
SAS Employee
Posts: 15

Re: How to round up a date to nearest second

Posted in reply to eagles_dare13

Hello eagles_dare13,

If your input data is consistently the same length (23 characters) and formatted as your example data, maybe try:

data have;

  infile datalines delimiter=',';

  format

    dt $23.;

  input dt;

datalines;

2014-07-09 11:42:34:826

;

run;

data want;

  set have;

  format

    dt2 e8601dt23.3;

  substr(dt,20,1)='.';

  put dt=;

  dt2=input(dt,e8601dt23.3);

  dt2=ceil(dt2);

  put dt2=;

run;

🔒 This topic is solved and locked.

Need further help from the community? Please ask a new question.

Discussion stats
  • 2 replies
  • 786 views
  • 3 likes
  • 3 in conversation