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?

SAS INNOVATE 2024

Innovate_SAS_Blue.png

Registration is open! SAS is returning to Vegas for an AI and analytics experience like no other! Whether you're an executive, manager, end user or SAS partner, SAS Innovate is designed for everyone on your team. Register for just $495 by 12/31/2023.

If you are interested in speaking, there is still time to submit a session idea. More details are posted on the website. 

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.

Get the $99 certification deal.jpg

 

 

Back in the Classroom!

Select SAS Training centers are offering in-person courses. View upcoming courses for:

View all other training opportunities.

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