SAS中的日期函数及需要注意的地方
2011-07-31 23:19阅读:
SAS中的日期函数
(1)SAS中用数值来表示日期,SAS日期值等于具体日期离1960/1/1天数。
eg:
date
SAS value
1959-1-1 -365
1960-1-1 0
1961-1-1 365
2008-1-1 17532
(2)SAS中的日期格式:
SAS有输入输出格式,输入格式通常在input语句中使用,而输出格式通常在format语句中使用。
输入格式:常见的有以下6种。
anydtdtew.
可以读取各种日期格式
w可以取5-32 默认的是 9
datew.
可以读取用ddmmmyy或者ddmmmyyyy形式表示的日期
w可以取7-32 默认的是 7
(注意:不管是输入还是输出,都没有ddmmmyyw.或者是ddmmmyyyyw.这种格式的写法,都是写成date9.)
ddmmyyw. 可以读取用ddmmyy或者ddmmyyyy形式表示的数据
w可以取6-32 默认的是6
mmddyyw. 可以读取用mmddyy或者mmddyyyy形式表示的数据
w可以取6-32 默认的是6
yymmddw. 可以读取用
yymmdd或者yyyymmdd形式表示的数据
w可以取6-32 默认的是6
julianw.
可以读取用yyddd或者yyyyddd形式表示的数据(表示yy年的第ddd天)
w可以取5-32 默认的是5
输出格式,常见的有8种,前4种是最常见的
datew.
(注意:不管是输入还是输出,都没有ddmmmyyw.或者是ddmmmyyyyw.这种格式的写法,都是写成date9.)
mmddyyw.
Ddmmyyw.
Yymmddw.
julianw.
weekdatew.
worddatew.
dayw.
(3)在读取日期变量时应该根据原始数据中日期所用的格式来决定输入格式:
eg:
有数据文件 08/14/1983 要读取这个日期就要在日期变量中使用一下格式:
Input birthday mmddyy10.
如果是14-08-1983则用:
Input birthday ddmmyy10.
如果是14 Aug 1983则用:
Input birthday ddmmmyy9.
(4)如果数据是用两位数来表示年份的需要设置前两位属于那个世纪
eg:
08/14/83
需要通过设置世纪来让SAS知道是1983或者是1783或者2083
SAS默认的是两位数日期在1920到2019 之间 即当两位数年份用20-99时SAS认为是1920-1999年
当两位数年份是00-19时SAS认为是2000-2019年
要改变默认设置可以通过OPTINS进行 在SAS中输入
OPTIONS yearcutoff=1950;
即可把SAS默认的两位数日期改为1950-2049年之间
OPTIONS yearcutoff=1700
把SAS默认的两位数日期改为1700-1799年之间
(5)SAS的日期值之间进行加减运算从而求出两个日期之间间隔多少天
futherdate=checkdate+21 可以求出checkdate21天后的日期是什么
eg:
furtherdate=intnx(‘month’,checkdate,3),即返回的是checkdate变量之后三个月的日期数值,从1号开始。
Integer=intck(‘month’,checkdate,furtherdate),即返回的是checkdate和
furtherdate这两个变量之间的月数
(6)日期函数
day()、month()、qrt()、year()、weekday()可以分别从SAS日期值返回日 、月、季、年、和星期
(注意:weekday返回的是一个1~7的数值,其中Sunday是1,而Saturday是7)
mdy(m,d,y)可以求出SAS日期值
yrdif(stardate,enddate,'actual')可以返回两个日期之间的真实间隔年数
datdif(stardate,enddate,'actual')可以返回两个日期之间的真实间隔天数(注意:计算两个日期之间的天数datdif和intck这两个函数的效果是一样的,就像date和today的效果相同一样)
西洋julian日期的形式有两种:
5-digit yyddd
7-digit yyyyddd