全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
5191 9
2013-01-15
请教:sas中有没有判断某一年是否是闰年的函数或程序。或者能否判断year/4是整数的函数或程序呢?非常感谢解惑!
因为我的数据包括fyear1,endmonth,date。我现在需要取到相对于fyear1结束的那个月(endmonth)的最后一天开始数,往前的366天(对应于date)。
数据举例如下:
fyear1 endmonth  date             roa
2000   05            19980203     0.5
2000   05            19980204     0.6
......
我的想法是把fyear1这一年的endmonth的最后一天day找到,然后用fyear1和endmonth和day拼成字符型数据,再转换为日期时间型和date相减,保留值为0-365的。
由于endmonth中有2月份的数据,因此我需要判断年份是否为闰年,这个应该怎么判断呢?谢谢啦!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2013-1-15 20:56:58

b=mdy(2,29,1981);
if (b=.) then .... not 闰年
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-1-15 22:42:33
if the year is a century year and is NOT divisible by 400 then that century year is NOT A LEAP YEAR.

I find an example online

http://www.sconsig.com/sastips/tip00039.htm         
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-1-16 11:37:36
Try this Macro.

option Symbolgen Mlogic Mprint;
%macro leapyr (year);
data _null_;
lst_dt="31Dec&year"d;
c=substrn(put(juldate7(lst_dt),7.),5,3);
if c ne "366" then put "&year is NOT Leap year.";
else put "&year is Leap year.";
run;
%mend leapyr;

%leapyr(2000);

---------
Results:
2000 is Leap year.
2001 is NOT Leap year.
2002 is NOT Leap year.
2003 is NOT Leap year.
2004 is Leap year.
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-1-16 12:42:25
复制代码
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-1-16 13:04:32
如果楼主是想找到fyear1那一年endmonth对应的月的最后一天,可以用下面的代码:

data test;
  input fyear1 endmonth  date : yymmdd8.        roa;
  format date yymmdd8.;
  cards;
2000   02            19980203     0.5
2000   05            19980204     0.6
2000   07            19980203     0.5
2000   08            19980204     0.6
2000   11            19980203     0.5
2000   12           19980204     0.6
2100   02            19980203     0.5
2008   02            19980204     0.6
2200   02            19980203     0.5
2400   02            19980204     0.6
;

data want;
   set test;
   if endmonth ne 12 then newvar=put(mdy(endmonth+1,1,fyear1)-1,yymmdd10.);
   else newvar=put(mdy(endmonth,31,fyear1),yymmdd10.);

run;
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群