Help using Base SAS procedures

calculate leap year thru sas?

Reply
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.

Respected Advisor
Posts: 3,124

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?

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

PROC Star
Posts: 7,356

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: 3,475

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: 2,757

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?

Ask a Question
Discussion stats
  • 7 replies
  • 3907 views
  • 7 likes
  • 8 in conversation