本站分享:AI、大数据、数据分析师培训认证考试,包括:Python培训Excel培训Matlab培训SPSS培训SAS培训R语言培训Hadoop培训Amos培训Stata培训Eviews培训

SAS 日期和时间函数_sas 日期函数_SAS培训

sas培训 cdadata 9586℃

SAS 日期和时间函数

关键词: sas 日期函数sas获取当前日期函数

常用日期和时间函数有:           
MDY(m,d,yr) 生成yr年m月d日的SAS日期值            
YEAR(date) 由SAS日期值date得到年            
MONTH(date) 由SAS日期值date得到月            
DAY(date) 由SAS日期值date得到日            
WEEKDAY(date) 由SAS日期值date得到星期几            
QTR(date) 由SAS日期值date得到季度值            

HMS(h,m,s) 由小时h、分钟m、秒s生成SAS时间值            
DHMS(d,h,m,s) 由SAS日期值d、小时h、分钟m、秒s生成SAS日期时间值            

DATEPART(dt) 求SAS日期时间值dt的日期部分           

INTNX(interval,from,n) 计算从from开始经过n个in间隔后的SAS日期。其中interval 可以取’YEAR’、’QTR’、’MONTH’、’WEEK’、’DAY’等。            
   比如,INTNX(‘MONTH’, ’16Dec1997’d, 3)结果为1998年3月1日。注意它总是返回一个周期的开始值。       
INTCK(interval,from,to) 计算从日期from到日期to中间经过的interval间隔的个数,其中interval取’MONTH’等。比如,INTCK(‘YEAR’, ’31Dec1996’d, ‘1Jan1998’d)   
   计算1996年12 月31日到1998年1月1日经过的年间隔的个数,结果得2,尽管这两个日期之间实际只隔1年。        
其它日期和时间函数还有DATE、TODAY、DATETIME、DATEJUL、JULDATE、HOUR、MINUTE、SECOND 、TIME、TIMEPART等。           

1:

%let filedate =’20Nov2010’d;
data _null;                    
      sdate=’16Jan2011’d;                    
      edate=’16feb2011’d;                    
      actual=datdif(sdate, edate, ‘act/act’);                    
      days360=datdif(sdate, edate, ’30/360′);        
      conn=’01feb2011:8:45’dt;
      servdate=datepart(conn);
      in_3m=INTNX(‘MONTH’,&filedate,-3);
      in_6m=INTNX(‘MONTH’,&filedate,-6);
      in_12m=INTNX(‘MONTH’,&filedate,-12);
      intck_day=INTCK(‘DAY’,sdate,&filedate);
      put servdate worddate.;
      put actual= days360=;                    
      format sdate yymmdd10.;                    
      format edate yymmdd10.;        
      format servdate  yymmdd10.;        
      format in_3m yymmdd10.;
      format in_6m yymmdd10.;
      format in_12m yymmdd10.;
   run;                   
   proc print data=_null;
   run;

result:

sdate                edate       actual   days360        conn             servdate       in_3m         in_6m           in_12m       intck_day   
2011-01-16  2011-02-16     31        30           1612169100   2011-02-01  2010-08-01  2010-05-01  2009-11-01      -57     

2:

%put Yesterday: %sysfunc(intnx(Day,”&sysdate”d,-1),yymmdd10);
%put Tomorrow:  %sysfunc(intnx(Day,”&sysdate”d, 1),yymmdd10);
%put Beginning of Last Week: %sysfunc(intnx(Week,”&sysdate”d,-1),yymmdd10);
%put Beginning of This Week: %sysfunc(intnx(Week,”&sysdate”d, 0),yymmdd10);
%put Beginning of Next Week: %sysfunc(intnx(Week,”&sysdate”d, 1),yymmdd10);

log:

432  %put Yesterday: %sysfunc(intnx(Day,”&sysdate”d,-1),yymmdd10);
Yesterday: 2011-06-26
433  %put Tomorrow:  %sysfunc(intnx(Day,”&sysdate”d, 1),yymmdd10);
Tomorrow:  2011-06-28
434  %put Beginning of Last Week: %sysfunc(intnx(Week,”&sysdate”d,-1),yymmdd10);
Beginning of Last Week: 2011-06-19
435  %put Beginning of This Week: %sysfunc(intnx(Week,”&sysdate”d, 0),yymmdd10);
Beginning of This Week: 2011-06-26
436  %put Beginning of Next Week: %sysfunc(intnx(Week,”&sysdate”d, 1),yymmdd10);
Beginning of Next Week: 2011-07-03

本小主的blog基本上是木有更新过的哦 (*^__^*) 嘻嘻…… 闲里偷忙 更新一下下

例3: 数值格式日期的转换

data part;
input no @@;
cards;
19880918 20120901 20100705
;
data b ;
set part;
no_day =input( put(no,$8.), yymmdd10.);
format no_day yymmdd10.;
run;
proc print noobs;
run;

result:

                            no           no_day
                                   19880918    1988-09-18
                                   20120901    2012-09-01
                                   20100705    2010-07-05

例4:SAS中时常会碰到IMPORT或SET的数据集中时间格式为$19.,即例如为“2011-05-09 22:19:02”;  

如何将其转换成标准的DATETIME19.格式的时间呢? 

主要用的是INPUT和SCAN函数 

实现CODE如下所示:  

DATA 逻辑库.数据集1;
SET 逻辑库.数据集2;
INFORMAT RECORDTIME2 DATETIME19.;
FORMAT RECORDTIME2 DATETIME19.;
RECORDTIME2=INPUT(SCAN(RECORDTIME,1,’ ‘),YYMMDD10.)*24*60*60+INPUT(SCAN(RECORDTIME,2,’ ‘),TIME8.);
RUN;

转载请注明:数据分析 » SAS 日期和时间函数_sas 日期函数_SAS培训

喜欢 (3)or分享 (0)