SAS 日期函数操作

1.基本设置
(1)SAS中用数值来表示日期,SAS日期值等于具体日期离1960/1/1天数。
eg:
date
1959-1-1
1960-1-1
1961-1-1
2008-1-1
(2)SAS中的日期格式:
SAS有输入输出格式,输入格式通常在input语句中使用,而输出格式通常在format语句中使用。
输入格式:常见的有以下6种。
anydtdtew.
可以读取各种日期格式
w可以取5-32
datew.
w可以取7-32
ddmmyyw.
w可以取6-32
mmddyyw.
w可以取6-32
yymmddw.
w可以取6-32 默认的是6
julianw.
w可以取5-32
输出格式,常见的有8种,前4种是最常见的
datew.
mmddyyw.
Ddmmyyw.
Yymmddw.
julianw.
weekdatew.
worddatew.
dayw.
(3)在读取日期变量时应该根据原始数据中日期所用的格式来决定输入格式:
eg:
有数据文件
Input
如果是14-08-1983则用:
Input
如果是14 Aug 1983则用:
Input
2.SAS常见日期函数
常用日期和时间函数有:
MDY(m,d,yr)
生成yr年m月d日的SAS日期值
YEAR(date)
由SAS日期值date得到年
MONTH(date)
由SAS日期值date得到月
DAY(date)
由SAS日期值date得到日
WEEKDAY(date)
由SAS日期值date得到星期几
QTR(date)
由SAS日期值date得到季度值
HMS(h,m,s)
由小时h、分钟m、秒s生成SAS时间值
DHMS(d,h,m,s)
由SAS日期值d、小时h、分钟m、秒s生成SAS日期时间值
DATEPART(dt)
求SAS日期时间值dt的日期部分
INTNX(interval,from,n)
计算从from开始经过n个in间隔后的SAS日期。其中interval
可以取'YEAR'、'QTR'、'MONTH'、'WEEK'、'DAY'等。
INTCK(interval,from,to)
计算从日期from到日期to中间经过的interval间隔的个数,其中interval取'MONTH'等。比如,INTCK('YEAR',
'31Dec1996'd, '1Jan1998'd)
其它日期和时间函数还有DATE、TODAY、DATETIME、DATEJUL、JULDATE、HOUR、MINUTE、SECOND 、TIME、TIMEPART等。
%let filedate='20Nov2010'd;
data _null;
sdate='16Jan2011'd;
edate='16feb2011'd;
actual=datdif(sdate,edate,'act/act');
days360=datdif(sdate,edate,'30.360');
conn='01feb2011 8:45'dt;
servdate=datepart(conn);
in_3m=INTNX('MONTH',&filedate,-3);
in_6m=INTNX('MONTH',&filedate,-6);
in_12m=INTNX('MONTH',&filedate,-12);
intck_day=INTCK('DAY',sdate,&filedate);
put servdate ;
put actual= days360=;
format sdate yymmdd10.;
format edate yymmdd10.;
format servdate yymmdd10.;
format in_3m yymmdd10.;
format in_6m yymmdd10.;
format in_12m yymmdd10.;
run;
proc print data=_null;
run;
运行结果如下图:
3.
data part;
input no @@;
cards;
19880918 20120901 20100705
;
data b;
set part;
no_day=input(put(no,$8.),yymmdd10.);
format no_day yymmdd10.;
run;
proc print data=b;
run;
运行结果如下图所示:
4.处理混合日期个数
data contacts;
input
format saledate mmddyy10.;
cards;
3034 EUR 30JAN2007 1876,30
101
128
1345 EUR 6FEB2007
109
;
run;
proc print data=contacts;
run;
5.SAS中时常会碰到IMPORT或SET的数据集中时间格式为$19.,即例如为“2011-05-09
如何将其转换成标准的DATETIME19.格式的时间呢?
主要用的是INPUT和SCAN函数
实现CODE如下所示:
RUN;