0
votes

I am working with a huge number of observations in different tables in different versions.

I will use a date %let date_to_view = "20JAN2014:16:10"dt; But how to convert this date into SAS format?

I knew how to Convert SAS data type (use proc sql):

dhms("01JAN1970'd,3,0,i.valid_dttm/1000) format datetime20.

I see date 20JAN2014:16:34:10 is 1390224849927 but how to convert it into code?

2
The dateTIME value that you posted does not match the integer value that you posted. The number you have posted is way too large. That particular time in Jan 2014 should have a stored value of only 1,705,854,850.Tom

2 Answers

3
votes

In your formula dhms("01JAN1970'd,3,0,i.valid_dttm/1000) you are converting a number that represents the number of milliseconds since 01JAN1970 to a SAS datetime value that represents the number of seconds since 01JAN1960. You also appear to be adding 3 hours.

So it sounds like your question is how to convert a SAS DATETIME value into a Unix timestamp value. So just reverse the arithmetic.

Your formula to convert from a Unix timestamp to a SAS datetime was:

sasdt2 = '01JAN1970:00:00'dt + '03:00't + unix_timestamp2/1000 ;

So to convert from a SAS datetime value to a Unix timestamp use:

unix_timestamp1 = 1000*(sasdt1 - '01JAN1970:00:00'dt - '03:00't) ;
1
votes

"20JAN2014:16:10"dt is already in the correct SAS date (datetime) format, but as a date literal. SAS stores this as a number, representing the number of seconds since 01JAN1960:00:00:00.

If you just want the date component of the datetime, use the datepart() function, and format the result accordingly, e.g. date9..

data want ;
  dt = "20JAN2014:16:10"dt ;
  date = datepart(dt) ;
  format dt datetime19. date date9. ;
  /* To have 'date' show as the unformatted value, simply remove the format */
  format date best32. ;
run ;