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

Hi everyone

 

I have a dataset containing data on a weekly basis. Each week has its own (character) variable - e.g. week 32 of 2010 is labelled y1032. What I want to do is to keep only data from 2018, 2019, and 2020 (keeping all weeks within a given year) - i.e keppeing 52*3 = 156 weeks:

 

- 1801, 1802, ... 1852.

- 1901, 1902, ... 1952

- 2001, 2002, ... 2052

 

I think an array should do the job. However, I'm having a hard time setting up a proper array as there is a "0" before the first 9 weeks within every year. Any suggestions on how to go over this?

Best,

Frederik

 

 

1 ACCEPTED SOLUTION

Accepted Solutions
FreelanceReinh
Jade | Level 19

Hi @Taasby,


@Taasby wrote:

Each week has its own (character) variable - e.g. week 32 of 2010 is labelled y1032. What I want to do is to keep only data from 2018, 2019, and 2020 (keeping all weeks within a given year) - i.e keppeing 52*3 = 156 weeks


Try this:

data want;
set have(keep=y18: y19: y20:);
run;

Or this:

data want;
set have(keep=y1801-y1852 y1901-y1952 y2001-y2052);
run;

In the second case, make sure that you don't miss a week 53. Add more variables to the KEEP= lists if needed.

View solution in original post

5 REPLIES 5
Oligolas
Barite | Level 11

Hi,

what does your data structure look like?

 

is this what you're looking for?

data have;
   input week $;
   datalines;
1801
1802
1852
1901
1902
1952
2001
2002
2052
1701
1702
1752
2101
2102
2152
;
run;

data want;
   set have;
   if '18'<=:week<=:'20';
run;

 

________________________

- Cheers -

Taasby
Calcite | Level 5
datalines;
1801 1
1802 1
1803 0
1804 0
1805 1
.
.
.
1851 0
1901 1
1902 0

Each variable is a dummy variable taking on the value of 0 or 1. It is looking like the above, but it would be orded horizontally in the SAS dataset as every week is a variable on its own. 

Best,

Frederik

Kurt_Bremser
Super User

@Taasby wrote:

.... as every week is a variable on its own. 


which is always a VERY BAD IDEA. Do not keep data in structure, see Maxim 19.

As you can see, with a long dataset layout the code practically writes itself.

If you receive data in a wide layout, always transpose to long immediately upon import.

FreelanceReinh
Jade | Level 19

Hi @Taasby,


@Taasby wrote:

Each week has its own (character) variable - e.g. week 32 of 2010 is labelled y1032. What I want to do is to keep only data from 2018, 2019, and 2020 (keeping all weeks within a given year) - i.e keppeing 52*3 = 156 weeks


Try this:

data want;
set have(keep=y18: y19: y20:);
run;

Or this:

data want;
set have(keep=y1801-y1852 y1901-y1952 y2001-y2052);
run;

In the second case, make sure that you don't miss a week 53. Add more variables to the KEEP= lists if needed.

Taasby
Calcite | Level 5

It did the job! Cheers! 🙂

SAS Innovate 2025: Save the Date

 SAS Innovate 2025 is scheduled for May 6-9 in Orlando, FL. Sign up to be first to learn about the agenda and registration!

Save the date!

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
  • 5 replies
  • 682 views
  • 0 likes
  • 4 in conversation