Hi:
Although I will answer your question here, my first recommendation is that you do not add a NEW question on a NEW topic to an old posting. In fact, this old posting was about trying to use PROC IMPORT on a SAS dataset that already existed, which is a totally different question than the one you have. When I opened the post, I almost closed it again because the posting was so old -- and I had to search through it to find why it had popped up again. Your post got buried in the middle of an old post. It would be better to start a completely new posting.
You did well, to provide a sample of your data, however. But, think of poor SAS, when storing the number 201403, how is SAS to know that the number 201403 means March 2014 and NOT $201,403???
SAS stores date values in a special way, as the number of days offset from a zero date -- the zero date in SAS is Jan 1, 1960 -- so think of a timeline like this:
So your "number" of 201403 isn't ready to be treated like a SAS date variable Because for SAS, the number 201403 is a lot of days AFTER Jan 1, 1960 -- up into the 2500's --
Let's look at a timeline with more days on it (not to scale):
When you want SAS to treat a numeric variable differently, you need to take your date and "find" the correct number of days since Jan 1, 1960 -- going forward in time (positive number) or backward in time (negative number), as shown above. So, SAS would store July 4, 1776 as -67019 and then you could use ANY date format to display the date in any form you chose. You can prove this to yourself by a simple program like this:
data testit;
date1a = mdy(07,04,1776);
date1b = -67019;
date2 = -3334;
date3 = -368;
date4 = 0;
date5 = 9;
date7 = 9099;
date8 = 19783;
date9 = 201403;
run;
proc print data=testit;
title '1) internally stored date values';
run;
proc print data=testit;
title '2 Use a format';
format date: yymmdd10.;
run;
and the results of that program are:
So as you can see in the program above -- you can figure out the number of days since Jan 1, 1960 and make your numeric date variable, or you can use the MDY function (one of many date functions) to "do the counting" for you. As you can see above, when the MDY function is invoked: newvar=mdy(mon_var, day_var, year_var); then, SAS will do the counting and the number you store is now the number of days since Jan 1, 1960 and then you can use a SAS date format as you envision.
But, there's another challenge -- you seem to have a year and a month -- and breaking those 2 values apart is easy for a numeric variable but as you can see from the timeline and from the MDY function, SAS needs to know the DAY -- so what day would you use? 01, 15, 19??? You say you want to see the date displayed as "YYMMDD.10 Format " -- but you have not said what day value to use.
In situations like this, it is very common to use 1 (since every month has a day 1) or 15 (since every month has a day 15). One easy thing to do to break apart your year and your month values (assuming that your original variable IS a numeric variable), then you can divide to get the year and the month values split out, as shown below. Note that this program will ONLY work if the original variable is a number and if the month value ALWAYS has a leading 0 in the month (201406 and NOT 20146):
Other methods would be needed if your original variable was a character string, not numeric, or if the months were NOT always represented as a 2 digit month. But I will leave those conditions for you to investigate in the documentation.
cynthia
... View more