how to calculate leap year thru SAS.
In case if i have value say year 2000 its divisible by 4 so its called as leap year.
Likewise i will i have set of years say 2000 to 2012 then how can i do the calculation.
Please look up mod() function, it may suit your need.
Regards,
Haikuo
How about:
data want ;
do x = 2000 to 2012;
length leap $3;
leap='no';
If mod(x,4)=0 then leap='YES'; /* divisible by 4 */
If mod(x,100)=0 and mod(x,400) ne 0 then leap='NO';
output;
end;
proc print;Run;
Obs x leap
1 2000 YES
2 2001 no
3 2002 no
4 2003 no
5 2004 YES
6 2005 no
7 2006 no
8 2007 no
9 2008 YES
10 2009 no
11 2010 no
12 2011 no
13 2012 YES
Linlin
or, just let SAS do the work:
data leaptest;
do year=1996 to 2015;
leapyear=ifc(input(catt('29','feb',year), ? date9.),'yes','no');
output;
end;
run;
Of course the MOD technique will fail in the year 2100.
To Authur's reply, I'll add that the expression
date = mdy(02,29,year);
returns a valid value is YEAR is a leap year and a missing value otherwise.
This work great. Thank you. What if I wanted to modify the program to create a new data set that will have leap years as only observations between two given dates?
Thank you for your help.
You could begin by creating a data set with just the leap years. Using the trick from @Rick_SAS:
data leap_years(keep=year);
length date 8;
do year=2000 to 2200;
/* MISSING when Feb 29 not a valid date */
date=mdy(2,29,year);
if not missing(date) then
output;
end;
run;
Then you could join/merge or exclude dates from your reference data set based on the years that appear in the results of this program. See more explanation in my blog post on this: SAS knows it's a leap year; do you?
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 the difference between classical and Bayesian statistical approaches and see a few PROC examples to perform Bayesian analysis in this video.
Find more tutorials on the SAS Users YouTube channel.
Ready to level-up your skills? Choose your own adventure.