BookmarkSubscribeRSS Feed
🔒 This topic is solved and locked. Need further help from the community? Please sign in and ask a new question.
paddyb
Quartz | Level 8

data demo;
length dt $9;
dt='mar2010';output;
dt='2007';output;
dt='1feb2010';output;
dt='';output;
dt='32010';output;
dt='142010';output;
run;

i have to separate month,date,year from above dataset,i tried

year= SUBSTR(TRIM(dt),LENGTH(TRIM(dt))-3);
month=SUBSTR(TRIM(dt),LENGTH(TRIM(dt))-6,3);

to get year and month values but i m not getting date value with this logic.

any other way to separate it?

thanks

 

1 ACCEPTED SOLUTION

Accepted Solutions
art297
Opal | Level 21
data demo;
length dt $9;
dt='mar2010';output;
dt='2007';output;
dt='1feb2010';output;
dt='';output;
dt='32010';output;
dt='142010';output;
run;
data want;
  set demo;
  format date date9.;
  if length(dt) eq 4 then date=mdy(1,1,dt);
  else if length(dt) eq 5 then date=mdy(1,first(dt),substr(dt,2));
  else if length(dt) eq 6 then date=
    mdy(1,substr(dt,1,2),substr(dt,3));
  else date=input(dt,anydtdte9.);
  month=month(date);
  day=day(date);
  year=year(date);
  if length(dt) eq 7 then call missing(day);
  else if length(dt) in (5,6) then call missing(month);
  else if length(dt) eq 4 then do;
    call missing(month);
    call missing(day);
  end;
run;

Art, CEO, AnalystFinder.com

 

View solution in original post

4 REPLIES 4
art297
Opal | Level 21

What month, day and year to you expect to get from each of the following:

mar2010
2007
32010
142010

 

Art, CEO, AnalystFinder.com

 

paddyb
Quartz | Level 8

for 32010 day=3 month= missing and yr =2010

for mar2010 day=missing month=march yr=2010

for 2007 day=missing month=missing yr=2007

for142010 day=14 month=missing yr=2010

art297
Opal | Level 21
data demo;
length dt $9;
dt='mar2010';output;
dt='2007';output;
dt='1feb2010';output;
dt='';output;
dt='32010';output;
dt='142010';output;
run;
data want;
  set demo;
  format date date9.;
  if length(dt) eq 4 then date=mdy(1,1,dt);
  else if length(dt) eq 5 then date=mdy(1,first(dt),substr(dt,2));
  else if length(dt) eq 6 then date=
    mdy(1,substr(dt,1,2),substr(dt,3));
  else date=input(dt,anydtdte9.);
  month=month(date);
  day=day(date);
  year=year(date);
  if length(dt) eq 7 then call missing(day);
  else if length(dt) in (5,6) then call missing(month);
  else if length(dt) eq 4 then do;
    call missing(month);
    call missing(day);
  end;
run;

Art, CEO, AnalystFinder.com

 

paddyb
Quartz | Level 8

Thank you sir

hackathon24-white-horiz.png

2025 SAS Hackathon: There is still time!

Good news: We've extended SAS Hackathon registration until Sept. 12, so you still have time to be part of our biggest event yet – our five-year anniversary!

Register Now

How to Concatenate Values

Learn how use the CAT functions in SAS to join values from multiple variables into a single value.

Find more tutorials on the SAS Users YouTube channel.

SAS Training: Just a Click Away

 Ready to level-up your skills? Choose your own adventure.

Browse our catalog!

Discussion stats
  • 4 replies
  • 1473 views
  • 1 like
  • 2 in conversation