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
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.
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 -
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
@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.
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.
It did the job! Cheers! 🙂
SAS Innovate 2025 is scheduled for May 6-9 in Orlando, FL. Sign up to be first to learn about the agenda and registration!
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.
Ready to level-up your skills? Choose your own adventure.