## calculate leap year thru sas?

Occasional Contributor
Posts: 12

# calculate leap year thru sas?

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.

Posts: 3,167

## calculate leap year thru sas?

Please look up mod() function, it may suit your need.

Regards,

Haikuo

Super Contributor
Posts: 1,636

## calculate leap year thru sas?

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

PROC Star
Posts: 8,164

## calculate leap year thru sas?

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;

Regular Contributor
Posts: 184

## Re: calculate leap year thru sas?

Of course the MOD technique will fail in the year 2100.

SAS Super FREQ
Posts: 4,242

## Re: calculate leap year thru sas?

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.

Contributor
Posts: 21

## Re: calculate leap year thru sas?

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.

Community Manager
Posts: 3,432

## Re: calculate leap year thru sas?

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?

Discussion stats
• 7 replies
• 4820 views
• 7 likes
• 8 in conversation