This tutorial explains how to convert Unix Datetime to SAS Datetime format.
Method 1 : Adding Number of Seconds
A Unix datetime value starts from January 1, 1970. Whereas a SAS datetime value starts from January 1, 1960. To convert a Unix datetime value to a SAS datetime value, we can add the number of seconds between January 1, 1960 and January 1, 1970 i.e. 315619200 seconds. To display a variable in datetime format, we can use the PUT Function with datetime20. format.
data unix_to_datetime; unix_timestamp = 1692826529; /* Convert Unix timestamp to SAS datetime format */ sas_datetime = put(315619200 + unix_timestamp, datetime20.); /* Print in LOG Window*/ put "Unix Timestamp:" unix_timestamp; put "Formatted Datetime:" sas_datetime; run; proc print;
Method 2 : dhms Function
We can use the dhms function to convert unix to SAS datetime format.
data unix_to_datetime; unix_timestamp = 1692826529; /* Convert Unix timestamp to SAS datetime format */ sas_datetime = put(dhms('01jan1970'd, 0, 0, unix_timestamp), datetime20.); /* Print in LOG Window*/ put "Unix Timestamp:" unix_timestamp; put "Formatted Datetime:" sas_datetime; run;
To display the datetime in local time in SAS, we can use the TZONEOFF() function.
data unix_to_datetime; unix_timestamp = 1692826529; /* Convert Unix timestamp to SAS datetime format */ sas_datetime = put(dhms('01jan1970'd, 0, 0, unix_timestamp + TZONEOFF()), datetime20.); /* Print in LOG Window*/ put "Unix Timestamp:" unix_timestamp; put "Formatted Datetime:" sas_datetime; run;
Result: Unix Timestamp:1692826529 Formatted Datetime:24AUG2023:03:05:29
To display date in specific timezone, we can set the timezone using option TIMEZONE=.
option TIMEZONE='AUSTRALIA/MELBOURNE'; data unix_to_datetime; unix_timestamp = 1692826529; /* Convert Unix timestamp to SAS datetime format */ sas_datetime = put(dhms('01jan1970'd, 0, 0, unix_timestamp + TZONEOFF()), datetime20.); /* Print in LOG Window*/ put "Formatted Datetime:" sas_datetime; run;
Output : Formatted Datetime:24AUG2023:08:35:29
Share Share Tweet