Help using Base SAS procedures

Partial date conversion

Reply
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: 11,343

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: 19,822

Re: Partial date conversion

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

Use compress and input function to get dates.

Ask a Question
Discussion stats
  • 2 replies
  • 1698 views
  • 0 likes
  • 3 in conversation