DATA Step, Macro, Functions and more

Date / Time Formatting Issue

Accepted Solution Solved
Reply
Occasional Contributor
Posts: 5
Accepted Solution

Date / Time Formatting Issue

Hello,

 

I have a problem with DATE in SAS.

I have DATE in my table

Przechwytywanie.PNG

 

when i change the format of this date (Format AUGDT DATE9.;)

I get only ****** (9999-12-31)

 

What is all about?


Accepted Solutions
Solution
‎11-24-2016 05:49 AM
Super User
Super User
Posts: 7,988

Re: Date / Time Formatting Issue

[ Edited ]

Dates and times are stored a numbers from a certain time point.  AUGDT you give is a datetime variable.  Hence the number stored behind the scenes is a datetime amount from a certain time.  If you then try to format this larger number as a smaller date it is far outside the proper date number range hence you get *****.

You need to split the date part of the datetime out, then format that, eg;

data want;
  set have;
  mydate=datepart(augdt);
  format mydate date9.;
run;

 

Run this coe for instance, then look at the values in show_actual_value variables, you can see the difference:

data test;
  augdt="01JAN2016 14:15"dt;
  show_actual_value_dt=augdt;
  d9fmt=datepart(augdt);
  show_actual_value_d=d9fmt;
  format augdt datetime. d9fmt date9.;
run;

 

View solution in original post


All Replies
Solution
‎11-24-2016 05:49 AM
Super User
Super User
Posts: 7,988

Re: Date / Time Formatting Issue

[ Edited ]

Dates and times are stored a numbers from a certain time point.  AUGDT you give is a datetime variable.  Hence the number stored behind the scenes is a datetime amount from a certain time.  If you then try to format this larger number as a smaller date it is far outside the proper date number range hence you get *****.

You need to split the date part of the datetime out, then format that, eg;

data want;
  set have;
  mydate=datepart(augdt);
  format mydate date9.;
run;

 

Run this coe for instance, then look at the values in show_actual_value variables, you can see the difference:

data test;
  augdt="01JAN2016 14:15"dt;
  show_actual_value_dt=augdt;
  d9fmt=datepart(augdt);
  show_actual_value_d=d9fmt;
  format augdt datetime. d9fmt date9.;
run;

 

☑ This topic is solved.

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

Discussion stats
  • 1 reply
  • 138 views
  • 2 likes
  • 2 in conversation