如何限制 SAS 中的月数

How to limit number of Months in SAS

我有一个列名 "month" 有 31 个月

我想做的是我想限制月数

例如:- 当前月份后接两个未来月份,前 3 个月后跟当前月份

如果当前月份是四月,那么它必须显示类似

的内容

FEb-MAR-APR(当月)-MAY-JUN

任何人都知道,我们如何在 SAS 中做到这一点并且它应该动态变化?

当前 table 列月份(格式 dtdate9.)

2016 年 1 月 1 日 01FEB2016 2016年03月01日 2016年4月1日 2016年5月1日 01JUN2016 2016年7月1日 01AUG2016 01SEP2016 2016年10月1日 01NOV2016 01DEC2016 2017年1月1日 01FEB2017 2017年3月1日 2017年4月1日 2017年5月1日 01JUN2017 2017年7月1日 01AUG2017 01SEP2017 01OCT2017 01NOV2017 01DEC2017 2018年1月1日 01FEB2018 01MAR2018 2018年4月1日 2018年5月1日 01JUN2018 2018 年 12 月 1 日

输出:- 我需要两列最大日期和最小日期:最大日期将为 +2,最小日期将为 -3,并且对于当前的每个月,它都应该动态变化。最大和最小这两列我将在我的报告工具 SAS VA 中用作最小和最大之间的月份

提前致谢

如果你有表格数据那么你只需要做两个步骤:

  1. (可选步骤)按日期而非月份名称对数据排序 PROC SORT
  2. 使用INTCK()函数来检查你想要的间隔(以月为单位)和date()returns今天的日期

虚拟数据:

data have;
length date 8. month . ;
input date month $ ;
informat date anydtdte20.;
format date ddmmyys10.;
datalines;
01/07/2018 JUL
01/02/2018 FEB
01/03/2018 MAR
01/04/2018 APR
01/05/2018 MAY
01/06/2018 JUN
01/08/2018 AUG
01/09/2018 SEP
;
run;

proc sort data=have out=sorted; by date; run;

解决方案 1:使用数据步骤

data want;
set sorted;
diff= intck('month',date(),date);
if (diff<= 2 and diff>= -3) then output;
run;

解决方案 2:使用 Proc SQL

proc sql;
create table want2 as
select * from sorted
where intck('month',date(),date) between 2 and -3 ;
quit;

输出:

date=01/02/2018 month=FEB diff=-3 
date=01/03/2018 month=MAR diff=-2 
date=01/04/2018 month=APR diff=-1 
date=01/05/2018 month=MAY diff=0 
date=01/06/2018 month=JUN diff=1 
date=01/07/2018 month=JUL diff=2

使用INTNX()函数获取特定数据范围(递增或递减)

数据:

data have;
input date ;
informat date date9.;
datalines;
01NOV2017 
01DEC2017 
01JAN2018 
01FEB2018 
01MAR2018 
01APR2018 
01MAY2018 
01JUN2018 
;
run;

解法:

proc sql;
create table want as
select 
date format=date9. ,
intnx('month',date,-3) as min_date format=date9.,
intnx('month',date,+2) as max_date format=date9.
from have;
quit;

输出:

date=01NOV2017 min_date=01AUG2017 max_date=01JAN2018
date=01DEC2017 min_date=01SEP2017 max_date=01FEB2018
date=01JAN2018 min_date=01OCT2017 max_date=01MAR2018
date=01FEB2018 min_date=01NOV2017 max_date=01APR2018
date=01MAR2018 min_date=01DEC2017 max_date=01MAY2018
date=01APR2018 min_date=01JAN2018 max_date=01JUN2018
date=01MAY2018 min_date=01FEB2018 max_date=01JUL2018
date=01JUN2018 min_date=01MAR2018 max_date=01AUG2018