BookmarkSubscribeRSS Feed
🔒 This topic is solved and locked. Need further help from the community? Please sign in and ask a new question.
sagulolo
Quartz | Level 8

hi all,

 

try to infile a list of date and by default it was set to 00/00/00, when i execute 00/00/00 will become missing value as it is a invalid date. Can it extract as a date 00/00/00 instead of missing value?

 

data testing;
  infile datalines dlm='|';
  input h :ddmmyy. g :ddmmyy.;
  format h g ddmmyy8.;
datalines;
10/12/07    | 10/01/16
00/00/00    | 28/03/17

;

 

please advice.

1 ACCEPTED SOLUTION

Accepted Solutions
Astounding
PROC Star

You can't save 00/00/00 as a date, because it isn't a date.  However, you can create your own format for display purposes.  For example:

 

proc format;

value mydate .='00/00/00' other=[ddmmyy8.];

run;

 

Then when using the data, apply the format:

 

format h g mydate.;

 

Just one final word, though.  After the billions of dollars spent overcoming problems with two-digit years, why wouldn't you choose a format that permits four-digit years?

View solution in original post

7 REPLIES 7
ballardw
Super User

What date do you want to use instead of missing? No day of the month, no month of the year = not a date. So the value cannot be represented as a date.

 

What will you do with those date variables later on?

sagulolo
Quartz | Level 8
thank for your time ballardw,

actually the date was recorded as an incident happen, eg payment date, transaction date etc. if 00/00/00 means no transaction or payment was made.

Best Regards
sagulolo
Quartz | Level 8
Possible to put it as 00/00/00 string since 00/00/00 is not a valid date?
rogerjdeangelis
Barite | Level 11

proc format;
 invalue fmtdte
  '00/00/00' =-9E99
   other = [ddmmyy.]
;
run;quit;

data testing;
  informat h fmtdte.;
  input h ;
cards4;
10/12/07
00/00/00
;;;;
run;quit;


Up to 40 obs WORK.TESTING total obs=2

Obs          H

 1       17510
 2       -9E99


or


Up to 40 obs WORK.TESTING total obs=2

Obs        H

 1     17510
 2         0



ballardw
Super User

@rogerjdeangelis

 

I think that an Informat/ Format solution may work better with the special missing

 

proc format;

invalue fmtdte

   '00/00/00'= .A

   other =[ddmmyy8.];

value mydate

   .A='00/00/00'

   other=[ddmmyy8.];

run;

 

Use of any value may run into issues with date functions.

  

Astounding
PROC Star

You can't save 00/00/00 as a date, because it isn't a date.  However, you can create your own format for display purposes.  For example:

 

proc format;

value mydate .='00/00/00' other=[ddmmyy8.];

run;

 

Then when using the data, apply the format:

 

format h g mydate.;

 

Just one final word, though.  After the billions of dollars spent overcoming problems with two-digit years, why wouldn't you choose a format that permits four-digit years?

sagulolo
Quartz | Level 8
Thank you so much Astounding,
for your question, just wanted to import to SAS according to the original text format. Or maybe in future, it might change to four-digit years.

sas-innovate-2024.png

Join us for SAS Innovate April 16-19 at the Aria in Las Vegas. Bring the team and save big with our group pricing for a limited time only.

Pre-conference courses and tutorials are filling up fast and are always a sellout. Register today to reserve your seat.

 

Register now!

How to Concatenate Values

Learn how use the CAT functions in SAS to join values from multiple variables into a single value.

Find more tutorials on the SAS Users YouTube channel.

Click image to register for webinarClick image to register for webinar

Classroom Training Available!

Select SAS Training centers are offering in-person courses. View upcoming courses for:

View all other training opportunities.

Discussion stats
  • 7 replies
  • 967 views
  • 0 likes
  • 4 in conversation