SAS基础-日期时间本质
SAS日期时间格式在SAS里,日期实际存储的是距离1960年1月1日的天数,时间实际存储的是距离凌晨的秒数。data tmp;date='01Jan1960’d;time='00:00:00’t;datetime='01Jan1960 00:00:00’dt;run;
SAS日期时间格式
在SAS里,日期实际存储的是距离1960年1月1日的天数,时间实际存储的是距离凌晨的秒数。
时间日期常量包括日期、时间、日期时间三种形式,命名需要采用单引号或双引号加D(日期)、T(时间)、DT(日期时间)后缀来表示。
日期的输入:加d;
时间的输入:加t;
日期时间的输入:加dt;
代码:
data tmp;
date='01Jan1960'd;
time='00:00:00't;
datetime='01Jan1960 00:00:00'dt;
run;
proc print data=tmp;run;

SAS日期时间格式-转换
字符型日期转换为数值型:
新变量名 = input(需转换日期的变量名,日期格式);
QSDATE = input(QSDAT,yymmdd10.) ;
数值型日期转换字符型格式:
新变量名 = compress(put(旧变量名,yymmdd10.))
yymmdd10.格式:yyyy-mm-dd
假设日期为1991年08月28日12:05:05.49。
代码:
data tmp;
date='28AUG1991'd;
time='12:05:05.49't;
datetime='28AUG1991 12:05:05.49'dt;
date1=compress(put(date,yymmdd10.));
time1=compress(put(time,time11.2));
datetime1=compress(put(datetime,datetime20.2));
run;
proc print data=tmp;run;

获取系统时间
系统日期:date()
系统时间:time();
系统星期:weekday();
The WEEKDAY function produces an integer that represents the day of the week, where 1=Sunday, 2=Monday, …, 7=Saturday.
时区:option timezone=‘Asia/Beijing’;
查看时区:
https://documentation.sas.com/doc/en/pgmsascdc/9.4_3.5/lesysoptsref/n0dp25ebcqokrfn154de7yfdy9ra.htm
proc format;
value week
1 = "Sunday"
2 = "Monday"
3 = "Tuseday"
4 = "Wednesday"
5 = "Thursday"
6 = "Friday"
7 = "Saturday";
run;
option timezone='Asia/Beijing';
data beijing;
date = date();
time = time();
week = weekday(date);
format date date10. time time8. week week.;
run;
proc print data=beijing;
title "Beijing time";
run;
option timezone='US/Pacific';
data seattle1;
date = date();
time = time();
week = weekday(date);
format date date10. time time8. week week.;
run;
proc print data=seattle1;
title "Seattle time";
run;

日期时间格式汇总



日期时间格式汇总参考“SAS编程技术教程(朱世武)”
两位日期的输出处理
yearcutoff=option 仅影响两位的年份,指定两位年份
例如:
options yearcutoff=1920; 设定了从1920年至2019年,100年的时间跨度
date1=12/07/41 41年在1920年至2019年,100年的时间跨度中,所以41年指1941年

计算时间间隔
intick(interval,start,end) 输出结果为数字
intnx(interval,start ,n) 输出结果为日期
intck:区间跨度
weeks:计算中间经历了多少个星期天,不是经历了多少个7天。
Months:计算中间经历过多少个1号。
Years:计算中间经历了过多少个1月1日。
data intck;
Weeks = intck ('week','31 dec 2000'd,'01jan2001'd);
Months = intck ('month','31 dec 2000'd,'01jan2001'd);
Years = intck ('year','31 dec 2000'd,'01jan2001'd);
Years1 =intck('year','15jun1999'd,'15jun2001'd);
Years2=intck('year','01jan2002'd,'31dec2002'd);
Months1=intck('month','15jun1999'd,'15jun2001'd);
put _all_;
run;

Intnx:给定区间,计算具体时间
默认年1月1日
B:beginning开始
M:middle中间
E:end末尾
S:same相同
data intnx;
TargetYear=intnx('year','05feb94'd,3);
TargetMonth=intnx('semiyear','01jan2001'd,1);
MonthX1=intnx('month','01jan95'd,5,'b');
MonthX2=intnx('month','01jan95'd,5,'m');
MonthX3=intnx('month','01jan95'd,5,'e');
format _all_ yymmdd10.;
put _all_;
run;

精确计算时间间隔(年月日时分秒)
合并年月日时分秒
DHMS函数:四个参数,分别是日期、小时、分钟、秒。函数结果为毫秒,除以3600,折算为小时。除以86400,折算天。
data = input(scan(Last,1," "),yymmdd10.);
hour = input(scan(scan(Last,-1," "),1,":"),best.);
min = input(scan(Last,-2,":"),best.);
sec = input(scan(Last,-1,":"),best.);
time =round((DHMS(input(scan(Last,1," "),yymmdd10.),input(scan(scan(Last,-1," "),1,":"),best.),
input(scan(Last,-2,":"),best.),input(scan(Last,-1,":"),best.))-
DHMS(input(scan(First,1," "),yymmdd10.),input(scan(scan(First,-1," "),1,":"),best.),
input(scan(First,-2,":"),best.),input(scan(First,-1,":"),best.)))/86400,1);

Last为字符格式日期时间,先切分为数值格式的日期、小时、分钟、秒,然后将数值型的日期、小时、分钟、秒合并。同理计算First。数值型的结果相减,然后将毫秒折算为天数。
日期差值
计算两个日期之间的差值,以年为单位
yrdif(开始日期,结束日期,“计算依据”);
计算两个日期之间的差值,以天为单位
datdif(开始日期,结束日期,“计算依据”);
act:按照每月实际天数计算
30/360:按每月30天计算
act/365:不管当年多少天,都按365天算
时间函数汇总

format :显示的样子,不能修改数值,仅修改显示样式。
更多推荐


所有评论(0)