SAS基础-日期时间本质

SAS日期时间格式

在SAS里,日期实际存储的是距离1960年1月1日的天数,时间实际存储的是距离凌晨的秒数。
时间日期常量包括日期、时间日期时间三种形式,命名需要采用单引号或双引号加D(日期)、T(时间)、DT(日期时间)后缀来表示。
日期的输入:加d;
时间的输入:加t;
日期时间的输入:加dt;

SAS基础-日期时间本质_第1张图片
SAS基础-日期时间本质_第2张图片
代码:

data tmp;
  date='01Jan1960'd;
  time='00:00:00't;
  datetime='01Jan1960 00:00:00'dt;
run;

SAS日期时间格式-转换

字符型日期转换为数值型:
新变量名 = input(需转换日期的变量名,日期格式);
QSDATE = input(QSDAT,yymmdd10.) ;

数值型日期转换字符型格式的代码:
新变量名 = compress(put(旧变量名,yymmdd10.))
yymmdd10.格式:yyyy-mm-dd

假设日期为1991年08月28日12:05:05.49。
SAS基础-日期时间本质_第3张图片
在这里插入图片描述
代码:

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’;
SAS基础-日期时间本质_第4张图片
SAS基础-日期时间本质_第5张图片
查看时区:
https://documentation.sas.com/doc/en/pgmsascdc/9.4_3.5/lesysoptsref/n0dp25ebcqokrfn154de7yfdy9ra.htm

日期时间格式汇总

SAS基础-日期时间本质_第6张图片
SAS基础-日期时间本质_第7张图片
SAS基础-日期时间本质_第8张图片
日期时间格式汇总参考“SAS编程技术教程(朱世武)”

两位日期的输出处理

yearcutoff=option 仅影响两位的年份,指定两位年份
例如:
options yearcutoff=1920; 设定了从1920年至2019年,100年的时间跨度
date1=12/07/41 41年在1920年至2019年,100年的时间跨度中,所以41年指1941年
SAS基础-日期时间本质_第9张图片
SAS基础-日期时间本质_第10张图片

计算时间间隔

intick(“interval,start,end) 输出结果为数字
intnx(“interval”,start ,n) 输出结果为日期

intck:区间跨度
weeks:计算中间经历了多少个星期天,不是经历了多少个7天。
Months:计算中间经历过多少个1号。
Years:计算中间经历了过多少个1月1日。
SAS基础-日期时间本质_第11张图片
SAS基础-日期时间本质_第12张图片

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相同

SAS基础-日期时间本质_第13张图片
SAS基础-日期时间本质_第14张图片

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;

精确计算时间间隔(年月日时分秒)

SAS基础-日期时间本质_第15张图片
说明:
DHMS函数:四个参数,分别是日期、小时、分钟、秒。函数结果为毫秒,除以3600,折算为小时。除以86400,折算天。
SAS基础-日期时间本质_第16张图片

SAS基础-日期时间本质_第17张图片

  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);

日期差值

act:按照每月实际天数计算
30/360:按每月30天计算
SAS基础-日期时间本质_第18张图片

你可能感兴趣的:(SAS,sas)