以下的内容,要感谢 webgu 在人大论坛上的亲情奉献。
在SAS处理中,特别是在多个数据集合并过程中,我们经常要遇到 日期格式不匹配的情况,但是 日期 又是一个非常关键的
匹配关键词,所以有必要 将各种不同的 日期变量的 转化 方法在这里做一个总结,不周到之处请广大博友提出修改意见。
1.
input: 年月日 output: 年月 ,这里要区分 显示 和 实际值 的区别。
输入的时候,有时是数值型,我们可能要将其 转化为字符型,然后再定义其 日期的显示格式;
比较常用的命令:
数值格式转化为字符型: put(year(date),z4.0) ||'-'||
put(month(date),z2.0);
字符格式转化为日期型:input(date,yymmdd10.)
时间变量的截取函数:
conn='01feb2011:8:45'dt;
dat_date=datepart(conn);
format dat_date date9.;
dat_time=timepart(conn);
format dat_time time5.;
Formats:
DATEw. date9. 01JAN2014
DDMMYYw.
YYMMDDw. YYMMDD10. 2014-06-18
YYMMxw.
YYMONw. put x yymon7.;
2012JAN
Functions:
DAY
MONTH
MDY date=mdy(1,2,2001);
2001-01-02
YEAR
季度:QTR(DATE)
今天日期返回函数:TODAY()
data test;
input time yymmn6.;
date=time-1;
format date yymmd7. time yymmd7.;
cards;
201201
201202
201203
201204
201205
;
run;
Data RiskFreeRateByMonth;
SetRiskFreeRateByMonth;
year_month=put(year(date),z4.0) ||'-'||
put(month(date),z2.0);
Proc print data=_last_(obs=25);
Run;
We can also use the “YYMMD.” format to do the same thing
For example:
year_month=put(date,YYMMD.);
data data _null_;
x='7jan2012'd;
put x
yymm7.;
put x
yymmc7.;
put x
yymmd7.;
put x
yymmn6.;
put x
yymmp7.;
put x
yymms7.;
put x
yymon7.;
run;
2012M01
2012:01
2012-01
201201
2012.01
2012/01
2012JAN
data a;
format date yymmdd10.;
date=mdy(1,2,2012);
yymm=compress(year(date)||month(date));
time=input(yymm,yymmn6.);
date1=time-1;
format date1 yymmd7.;
format time
yymmn6.;
run;
data a;
format date yymmdd10. time yymmd7. date1
yymmd7.;
date=mdy(1,2,2001);
time=input(put(date,yymmn6.),yymmn6.);
date1=time-1;
run;
%let e=3;
data a;
format date yymmdd10. time yymmd7. date1
yymmd7.;
date=mdy(1,2,2001);
time=input(put(date,yymmn6.),yymmn6.);
do i=1 to &e;
date1=intnx('month',time,-i);
output;
end;
run;
时间序列生成年月数据:
DATA zuoye7;
SET dd.cpi;
month=intnx('month','01NOV2009'd,_n_+1) ;
format month monyy7.;
proc print;
title '加入变量Month后的数据集输出';
run;
substr(put(date(),yymmddn8.),1,6)
运行后得到201207, 这个是当月的月份,请问如何得到上月的月份呢,运行后应该得到201206
su