在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;
字符型日期转换为数值型:
新变量名 = 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='27AUG1991 12:05:05.49'dt;
date1=compress(put(date,yymmdd10.));
time1=compress(put(time,time11.2));
datetime1=compress(put(datetime,datetime20.2));
run;
mdy(m,d,yr):生成yr年m月d日的SAS日期
year(date):由SAS日期值date得到年
mouth(date):由SAS日期值date得到月
day(date):由SAS日期值date得到日
weekday(date):由SAS日期值date得到星期几
qtr(date):由SAS日期值date得到季度值
format :显示的样子,不能修改数值,仅修改显示样式。
系统日期: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
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日,月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);