- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
Hi,
I am trying to convert partial dates using below code but unable to get any output. Can you please review and advise what is missing. Thank you.
required output -- data d2
DAT_R | dt_new | |
19 UNK 2012 | 19JAN2012 | |
UN UNK 2012 | 01JAN2012 | |
22 OCT 2012 | 22OCT2012 | |
06 NOV 2012 | 06NOV2012 | |
UN UNK 2013 | 01JAN2013 | |
| 01MAY2013 |
Data d2 (keep= dt_new DAT_R );
Set d1 ;
if scan(DAT_R,2) = 'UNK' and scan(DAT_R,1) = 'UN' then do;
day = '01';
month = 'JAN';
dt_new = input(compbl(day) || compbl(month) || scan(DAT_R,3),date9.);
end;
else if substr(DAT_R,1,2) in ('UN','un') then do;
day = '01';
dt_new = input(compbl(day) || substr(compress(DAT_R),3,7),date9.);
end;
else do;
dt_new = input(compress(DAT_R),date9.);
end;
format dt_new date9.;
Run;
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
Instead of building a complicated string try using the MDY function
day = input(scan(dat_r,1),best4.); /* which will be missing if not a numeric value*/
month = input (scan(dat_r,2),best4.);
year = input (scan(dat_r,3),best4.);
if day=. then day=1;
if month=. then month=1;
dt_new=mdy(month, day,year);
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
Use tranwrd function to replace UNK with Jan and UN with 01.
Use compress and input function to get dates.
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
Moved to new thread