## Partial date conversion

Occasional Contributor
Posts: 10

# Partial date conversion

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_Rdt_new
19 UNK 201219JAN2012
UN UNK 201201JAN2012
22 OCT 201222OCT2012
06 NOV 201206NOV2012
UN UNK 201301JAN2013
 UN MAY 2013
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;

Super User
Posts: 13,542

## Re: Partial date conversion

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);

Super User
Posts: 23,724

## Re: Partial date conversion

Use tranwrd function to replace UNK with Jan and UN with 01.

Use compress and input function to get dates.

Discussion stats
• 2 replies
• 2536 views
• 0 likes
• 3 in conversation