Amit Singh Parihar
Amit Singh Parihar

Reputation: 557

SAS: Unable to read dates in the program. How to fix it?

Here's my code. I am unable to read the dates from the input, it keeps giving me incorrect format, I tried changing a few times to mmddyy10. mmddyy8. and others but it still does not read them in correctly.

data master_patients;
infile datalines;
input account_number name $8-16 address $17-34 date MMDDYYYY10. gender $1. 
insurance_code $49-51 updated_date mmddyyyy10.;
datalines;
620135 Smith     234 Aspen St.     12-21-1975 m CBC 02-16-1998
645722 Miyamoto   65 3rd Ave.      04-03-1936 f MCR 05-30-1999
645739 Jensvold  505 Glendale Ave. 06-15-1960 f HLT 09-23-1993
874329 Kazoyan   76-C La Vista     .          . MCD 01-15-2003
;
proc print data=master_patients;
run;

Could you please point out where I am going wrong? Thanks for any help.

Upvotes: 0

Views: 404

Answers (3)

Frank wang
Frank wang

Reputation: 31

For modified list input for this problem.Just add ":" between variable name and informat.

data master_patients;
infile datalines;
input account_number name $8-16 address $17-34 date : mmddyy10. gender $1. 
insurance_code $49-51 updated_date : mmddyy10.;
datalines;
620135 Smith     234 Aspen St.     12-21-1975 m CBC 02-16-1998
645722 Miyamoto   65 3rd Ave.      04-03-1936 f MCR 05-30-1999
645739 Jensvold  505 Glendale Ave. 06-15-1960 f HLT 09-23-1993
874329 Kazoyan   76-C La Vista     .          . MCD 01-15-2003
;
proc print data=master_patients;
run; 

Please note if you don't add ":" , just change mmddyy10. to anydtdte. , the data read into dataset may Not correct.

Upvotes: 1

Tom
Tom

Reputation: 51566

There are two main problems. First the informat name does not have 4 Y's in it. Just 2. Second you don't have the column pointer in the right place when you are trying to read 10 characters as a date so that you are getting a blank and then the first 9 characters of the date. SAS cannot represents dates in the second or third century AD. Try MDY(12,21,197) and see what happens.

data master_patients;
infile datalines firstobs=2;
input account_number name $8-16 address $17-34 @36 date MMDDYY10.
      gender $1. insurance_code $49-51 @53 updated_date mmddyy10.
;
datalines;
----+----1----+----2----+----3----+----4----+----5----+----6----+
620135 Smith     234 Aspen St.     12-21-1975 m CBC 02-16-1998
645722 Miyamoto   65 3rd Ave.      04-03-1936 f MCR 05-30-1999
645739 Jensvold  505 Glendale Ave. 06-15-1960 f HLT 09-23-1993
874329 Kazoyan   76-C La Vista     .          . MCD 01-15-2003
;
proc print data=master_patients;
run;

Upvotes: 1

Reeza
Reeza

Reputation: 21274

I recommend a specific informat, rather than anydtdte though it helps you get started. It will ensure that your data is correct.

data master_patients;
infile datalines;
informat date updated_date mmddyy10.;
format date updated_date date9.;
input account_number name $ 8-16 address $ 17-34 date gender $1. 
insurance_code $ 49-51 updated_date;
datalines;
620135 Smith     234 Aspen St.     12-21-1975 m CBC 02-16-1998
645722 Miyamoto  65 3rd Ave.       04-03-1936 f MCR 05-30-1999
645739 Jensvold  505 Glendale Ave. 06-15-1960 f HLT 09-23-1993
874329 Kazoyan   76-C La Vista     .          . MCD 01-15-2003
;
run;

Upvotes: 1

Related Questions