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

I am trying to get work active flags for each month during past 2 years depending on work start and end dates. My sample is like:

work_idwork_startwork_end
115JUN202215JUN2023
215MAY202110MAY2022

So, my result will add 24 work active flags from Jan. 2021 to Dec. 2022. Work is active for each month if start before last day of month and end after first of month, result looks like:

work_idwork_startwork_end....active_3_2022active_4_2022active_5_2022active_6_2022...
115MAY202215JUN2023...0011...
215MAY202110MAY2022...1110...
1 ACCEPTED SOLUTION

Accepted Solutions
sasecn
Quartz | Level 8

Thanks for your reply. I got an error when I tried the code. I first create the test data just like my first table:

work_idwork_startwork_end
115-Jun-2215-Jun-23
215-May-2110-May-22

I called it "have", when I ran the code, I got this:

sasecn_0-1666578837501.png

Any idea, what it would be?

View solution in original post

4 REPLIES 4
Astounding
PROC Star

Let me suggest that you change the names of the flags slightly.  For example, instead of active_3_2022 use active_2022_03.  That will simplify some of the programming statements and make your variabe names easier to sort if that is needed.

 

Here's an untested solution:

data want;
   set have;
   array months {24} active_2021_01 - active_2021_12 active_2022_01 - active_2202_12;
   beginning = month(work_start) + 12 * (year(work_start) - 2021);
   ending = month(work_end) + 12 * (year(work_end) - 2021);
   do j = 1 to 24;
      months{j} = (beginning <= j <= ending);
   end;
   drop j beginning ending;
run;

It looks right.  But since yoiu're the one who has the data, you will need to be the one who tests it.  If there are any problems with it, please post the log.

sasecn
Quartz | Level 8

Thanks for your reply. I got an error when I tried the code. I first create the test data just like my first table:

work_idwork_startwork_end
115-Jun-2215-Jun-23
215-May-2110-May-22

I called it "have", when I ran the code, I got this:

sasecn_0-1666578837501.png

Any idea, what it would be?

Astounding
PROC Star

My fault, just a typo:  active_2202_12 should be active_2022_12

 

sasecn
Quartz | Level 8

Sorry, my bad, I should capture that. The code works. Thanks! Some part of the code, I still don't understand, but  I think I can figure it out by some additional readings. Thanks again!

sas-innovate-wordmark-2025-midnight.png

Register Today!

Join us for SAS Innovate 2025, our biggest and most exciting global event of the year, in Orlando, FL, from May 6-9. Sign up by March 14 for just $795.


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
  • 815 views
  • 1 like
  • 2 in conversation