SAS 日期和时间函数
关键词: sas 日期函数、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’等。
比如,INTNX(‘MONTH’, ’16Dec1997’d, 3)结果为1998年3月1日。注意它总是返回一个周期的开始值。
INTCK(interval,from,to) 计算从日期from到日期to中间经过的interval间隔的个数,其中interval取’MONTH’等。比如,INTCK(‘YEAR’, ’31Dec1996’d, ‘1Jan1998’d)
计算1996年12 月31日到1998年1月1日经过的年间隔的个数,结果得2,尽管这两个日期之间实际只隔1年。
其它日期和时间函数还有DATE、TODAY、DATETIME、DATEJUL、JULDATE、HOUR、MINUTE、SECOND 、TIME、TIMEPART等。
例1:
%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 worddate.;
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;
result:
sdate edate actual days360 conn servdate in_3m in_6m in_12m intck_day
2011-01-16 2011-02-16 31 30 1612169100 2011-02-01 2010-08-01 2010-05-01 2009-11-01 -57
例2:
%put Yesterday: %sysfunc(intnx(Day,”&sysdate”d,-1),yymmdd10);
%put Tomorrow: %sysfunc(intnx(Day,”&sysdate”d, 1),yymmdd10);
%put Beginning of Last Week: %sysfunc(intnx(Week,”&sysdate”d,-1),yymmdd10);
%put Beginning of This Week: %sysfunc(intnx(Week,”&sysdate”d, 0),yymmdd10);
%put Beginning of Next Week: %sysfunc(intnx(Week,”&sysdate”d, 1),yymmdd10);
log:
432 %put Yesterday: %sysfunc(intnx(Day,”&sysdate”d,-1),yymmdd10);
Yesterday: 2011-06-26
433 %put Tomorrow: %sysfunc(intnx(Day,”&sysdate”d, 1),yymmdd10);
Tomorrow: 2011-06-28
434 %put Beginning of Last Week: %sysfunc(intnx(Week,”&sysdate”d,-1),yymmdd10);
Beginning of Last Week: 2011-06-19
435 %put Beginning of This Week: %sysfunc(intnx(Week,”&sysdate”d, 0),yymmdd10);
Beginning of This Week: 2011-06-26
436 %put Beginning of Next Week: %sysfunc(intnx(Week,”&sysdate”d, 1),yymmdd10);
Beginning of Next Week: 2011-07-03
本小主的blog基本上是木有更新过的哦 (*^__^*) 嘻嘻…… 闲里偷忙 更新一下下
例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 noobs;
run;
result:
no no_day
19880918 1988-09-18
20120901 2012-09-01
20100705 2010-07-05
例4:SAS中时常会碰到IMPORT或SET的数据集中时间格式为$19.,即例如为“2011-05-09 22:19:02”;
如何将其转换成标准的DATETIME19.格式的时间呢?
主要用的是INPUT和SCAN函数
实现CODE如下所示:
DATA 逻辑库.数据集1;
SET 逻辑库.数据集2;
INFORMAT RECORDTIME2 DATETIME19.;
FORMAT RECORDTIME2 DATETIME19.;
RECORDTIME2=INPUT(SCAN(RECORDTIME,1,’ ‘),YYMMDD10.)*24*60*60+INPUT(SCAN(RECORDTIME,2,’ ‘),TIME8.);
RUN;
转载请注明:数据分析 » SAS 日期和时间函数_sas 日期函数_SAS培训