SAS Procedures

Help using Base SAS procedures
BookmarkSubscribeRSS Feed
mvk_sas
Calcite | Level 5

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.

7 REPLIES 7
Haikuo
Onyx | Level 15

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

Regards,

Haikuo

Linlin
Lapis Lazuli | Level 10

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

art297
Opal | Level 21

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;

Howles
Quartz | Level 8

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

Rick_SAS
SAS Super FREQ

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.

light
Obsidian | Level 7

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.

ChrisHemedinger
Community Manager

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?

Register for SAS Innovate 2025!! The premier event for SAS users, May 6-9 in Orlando FL. Sign up now for the best deals!

sas-innovate-white.png

Our biggest data and AI event of the year.

Don’t miss the livestream kicking off May 7. It’s free. It’s easy. And it’s the best seat in the house.

Join us virtually with our complimentary SAS Innovate Digital Pass. Watch live or on-demand in multiple languages, with translations available to help you get the most out of every session.

 

Register now!

What is Bayesian Analysis?

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.

SAS Training: Just a Click Away

 Ready to level-up your skills? Choose your own adventure.

Browse our catalog!

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