加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

SAS中日期格式处理

(2014-04-16 13:48:57)
标签:

sas

日期

分类: SAS笔记

    在SAS中与时间相关的值都是数字,时间值为距0:00:00的秒数,日期值为距1960-1-1的天数,日期时间值为据1960-1-1:00:00的秒数。可以将一个合法时间型字直接赋给数字型变量,但往往无法知道确切的数字是多少,可以采用时间常量的格式赋值。

data _null_;
format dt1 datetime20. dt2 datetime20. dt3 datetime20. dt4 datetime20.
date1 yymmdd10. time1 time10. time2 time10.;
dt1="22SEP2008 09:08:01"dt;
dt2="10JAN2005:08:08:08"dt;
dt3=0;
dt4= 86470;
date1="10JAN2005"d;
time1="08:09:10"t;
time2=80;
put dt1= dt2= dt3= dt4= ;
put date1=  time1= time2=;
run;

在log中得到的结果:

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=;
run;

在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); *返回日期时间值或时间值的秒;
run;

得到的结果如下:

http://s10/mw690/0025UTvnzy6I9kkdGhH89&690





0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有