Convert ddmmyy date to datetime in sas - sas

I want to convert date type 12/09/1991 to 12sep1991 00:00:00 in sas.tried using multiple formats but it is not working.
I have also checked with converting to numeric format.
Any help is appreciated

Dates are stored as the number of days since 1960. Datetime is stored as the number of seconds. There is not a format that can be used to display a date value as if it was a datetime value. You will need to convert the value instead.
You can use the dhms() function. Days, Hours, Minutes, Seconds.
So if your current variable is named date you can make a new variable named datetime.
datetime=dhms(date,0,0,0);
format datetime datetime20. ;
You could assign the value back to the original variable because both date and datetime values are stored as numbers.

select to_char(cast(sysdate as timestamp),'DD-MON-YYYY HH24:MI:SS.FF') from dual
Of course in the above the FF would also always be 000000
But if you have a timestamp variable you would not cast
select to_char(systimestamp,'DD-MON-YYYY HH24:MI:SS.FF') from dual

Related

convert a date from character to numeric

how can I convert a date (character) variable = 22249 (=30NOV2020) into 30NOV2020 (numeric)?
I tried many ways like input(), put() and so on but without success. Also setting date9., SAS output is: ERROR the format $date9 was not found or could not be loaded.
Many thanks in advance
Best
To convert a string like '22249' into a number like the date '30NOV2020'd just use the normal numeric informat. Once you have numeric variable with the value 22,249 you can attach any date type format to it to have it be displayed in a way that humans would recognize as a date.
data test;
string='22249';
date = input(string,32.);
format date date9.;
run;
Result
Obs string date
1 22249 30NOV2020

Changing format from time to data time format in SAS

Currently , I have date column in time format ,I want to change it to date time stamp format I.e ( I want the date column to look like 12nov 2020 12:03:45:00 )
Could someone help me on this ?
According to #KurtBremser:
SAS dates are counts of days, SAS datetimes are counts of seconds.
datetime = dhms(date,0,0,0);
will convert a date to a datetime. Or multiply by 86400.
A column showing a time representation hh:mm:ss can be one of three things:
A character column type containing digit characters 0-9 and :
A number column type containing a SAS time value being displayed as hh:mm:ss with the time format TIME8.
A number column type containing a SAS datetime value being displayed as hh:mm:ss with the datetime format TOD.
This sample program demonstrates how different kinds of values can all look the same when viewed.
data have;
v1 = '12:34:56';
v2 = hms(12,34,56);
v3 = dhms(today(),12,34,56);
put v1= / v2= time8. / v3=tod. / v3=datetime18.;
run;
------ LOG ------
v1=12:34:56
v2=12:34:56
v3=12:34:56
v3=25NOV20:12:34:56
Only #3 has enough information in the raw value to be formatted as ddmmmyyy:hh:mm:ss
format myDate datetime18.;
#2 requires computing a new value assuming something about the date part
* supposing myDate contains only time values (00:00:00 to 23:59:59) for today;
myNewDate = dhms(today(),0,0,0) + myDate;
format myNewDate datetime18.;
#1 requires interpretation through INPUT and a date assumption
* supposing myDate contains "hh:mm:ss" for today
myNewDate = dhms(today(),0,0,0) + input(myDate,time8.);
format myNewDate datetime18.;

datetime and date in same column

I have a question. I have a field in my SAS dataset that has a mixture of datetime and date variables.
The field is PST_DT and is Type: Numeric. Group: Date. Format: Date9. Length: 8.
Some values look like this:
PST_DT
8/22/2018 11:59:59 PM
8/22/2018
How can I turn just the datetime values in date format? I want all the values to be in date format.
Thanks.
The question does not make much sense as a date variable (number of days since 1960) cannot have a time component at all, much less have it selectively.
If you have a DATETIME value (number of seconds since 1960) and want to convert it to a date value use the datepart() function. And attach a date format so that the value displays in a human friendly way.
pst_date = datepart(pst_dt);
format pst_date yymmdd10. ;
If you have instead a character string then use the ANYDTDTE. informat to convert it to a date value.
pst_date = input(pst_dt,anydtdte40.);
format pst_date yymmdd10. ;

How to trim date variable in SAS?

I have a variable called DOJ( Date of Joining) and whose value is 10JAN12:00:00:00
I want to keep only date (i.e 10JAN12) How do I do that?
Note: DOJ is DATETIME18. in nature.
Thanks in Advance.
All dates are stored as numbers internally by SAS. A datetime is in seconds and a date is in days. You need to convert to days using the datepart() function.
DOJ = datepart(DOJ);
Then change the format so that it is displayed as a date:
format DOJ date9.;
datepart() function will do the job

How to convert Datetime into SAS format

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?
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) ;
"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 ;