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

Hi, everyone 

 

If I have a data format "20180825" for the Date column, how do I find the week number of the month for that date (i.e. the fourth week of Aug in 2018)? I need your help for this question ASAP. Thanks a lot.

 

 

1 ACCEPTED SOLUTION

Accepted Solutions
Astounding
PROC Star

That can be fixed.  You need to treat the date as a valid SAS date, not as an eight-digit number.  Unfortunately, it gets a little complex, so I'll break it out as two separate statements:

 

data want;

set have;

true_sasdate = input(put(datevar, z8.), yymmdd8.);

weeknum = ceil( day(true_sasdate) / 7);

run;

View solution in original post

7 REPLIES 7
Jagadishkatam
Amethyst | Level 16
data have;
input date:anydtdte.;
 week=intck('week',intnx('month',date,0),date)+1; 
format date date9.;
cards;
20180825
;
Thanks,
Jag
Astounding
PROC Star

If you need the answer ASAP, you should provide the rest of the relevant information.

 

Is your date variable an eight-digit number, or is it an eight-digit character string, or is it already a SAS date?

 

What is your definition of a week?  Are the first seven days of the month all in week 1?  Even if the first of the month is Wednesday?

 

Depending on your answers, here is a formula that might come in handy:

 

weeknum = ceil(day(datevar) / 7);

novinosrin
Tourmaline | Level 20

@Astounding Sir, elegance personified. Very neat!

AndyTeng
Fluorite | Level 6

 

 

 

 

Jagadishkatam
Amethyst | Level 16
Hi I tried the below and it worked with no issues

data have;
input date:anydtdte.;
weeknum = ceil(day(date) / 7);
format date date9.;
cards;
20021030
;
Thanks,
Jag
Astounding
PROC Star

That can be fixed.  You need to treat the date as a valid SAS date, not as an eight-digit number.  Unfortunately, it gets a little complex, so I'll break it out as two separate statements:

 

data want;

set have;

true_sasdate = input(put(datevar, z8.), yymmdd8.);

weeknum = ceil( day(true_sasdate) / 7);

run;

AndyTeng
Fluorite | Level 6
Hi, Astounding
It works!
Yes, I have to transform the date to a valid SAS date first.
Thank you very much.

sas-innovate-2024.png

Available on demand!

Missed SAS Innovate Las Vegas? Watch all the action for free! View the keynotes, general sessions and 22 breakouts on demand.

 

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.

Click image to register for webinarClick image to register for webinar

Classroom Training Available!

Select SAS Training centers are offering in-person courses. View upcoming courses for:

View all other training opportunities.

Discussion stats
  • 7 replies
  • 8369 views
  • 9 likes
  • 4 in conversation