在SAS中与时间相关的值都是数字,时间值为距0:00:00的秒数,日期值为距1960-1-1的天数,日期时间值为据1960-1-1:00:00的秒数。可以将一个合法时间型字直接赋给数字型变量,但往往无法知道确切的数字是多少,可以采用时间常量的格式赋值。
dt1=22SEP2008:09:08:01
dt2=10JAN2005:08:08:08 dt3=01JAN1960:00:00:00
dt4=02JAN1960:00:01:10
date1=2005-01-10 time1=8:09:10 time2=0:01:20
对时间、日期、日期时间的显示或转换成字符型,使用sas自带的format,可省去不少转换步骤。
data _null_;
date=date();
date1=put(date,yymmdd10.);
date2=put(date,yymmdd8.);
date3=put(date,yymmdd6.);
date4=put(date,yymmddn8.);
*不需要写成compress(put(date,yymmdd10.),'-');
yearmonth=put(date,yymmn6.);
*不需要写成substr(compress(put(date,yymmdd10.),'-'),1,6);
year=put(date,year4.);
dt="10JAN2009:08:08:08"dt;
dt1=put(dt,datetime20.);
dt2=put(dt,is8601dt20.);
dt3=put(dt,NLDATM30.);
time="08:09:10"t;
time1=put(time,time8.);*10点前小时只有1位;
time2=put(time,tod8.); *10点前小时会补0,凑足2位;
put date= date1= date2= date3= date4= yearmonth= year=;
put dt= dt1= dt2= dt3=;
put time= time1= time2=;
在log中结果:
date=17969
date1=2009-03-13 date2=09-03-13 date3=090313 date4=20090313
yearmonth=200903 year=2009
dt=1547194088 dt1=10JAN2009:08:08:08 dt2=2009-01-10T08:08:08
dt3=2009年01月10日 08时08分08秒
time=29350 time1=8:09:10 time2=08:09:10
常用时间函数:
data times;
format date1 yymmdd10. date2 yymmdd10. date3 yymmdd10. datep
yymmdd10.
dt1 is8601dt20. dt2 is8601dt20.
timep tod8. time1 tod8. time2 tod8.;
date1=DATE(); *返回当前日期值,同TODAY();
dt1=DATETIME(); *返回当前日期时间值;
time1=TIME(); *返回当前时间值;
dt2=DHMS('02JAN2009'd, 8, 13, 21) ;*根据日期、时、分、秒,返回日期时间值;
date2=MDY(3,21,2009); *根据月、日、年返回日期值;
date3=YYQ(2009,4); *根据年、季,返回此季度第一天的日期值;
time2=HMS(12,5,45 ); *根据时、分、秒,返回时间值;
timep=TIMEPART(dt1); *返回日期时间的日期值;
datep=DATEPART(dt1); *返回日期时间的时间值;
year1=YEAR(date1); *返回日期的年;
qauter1=QTR(date1); *返回日期的季度。;
month1=MONTH(date1); *返回日期的月;
day1=DAY(date1); *返回日期的日;
day2=WEEKDAY(date1); *返回日期的星期几,1~7为星期日~星期六;
hour1=HOUR(dt2); *返回日期时间值或时间值的小时;
minute1=MINUTE(dt2); *返回日期时间值或时间值的分钟;
second1=SECOND(dt2); *返回日期时间值或时间值的秒;
得到的结果如下:
新浪简介
|
About Sina
|
广告服务
|
联系我们
|
招聘信息
|
网站律师
|
SINA English
|
产品答疑