SAS intnx 四分之一变化

SAS intnx quarter variation

抱歉,这可能是一个非常简单的问题,但我似乎找不到答案。

比如说,我们要创建一个 table,其中包含从上个月开始的 4 个季度:

%macro asd;

%let today = %sysfunc(today());

%let quarter_count_back = 4;

%let first_quarter = %sysfunc(intnx(month,&today.,-1));

proc sql;
create table quarters
(
Quarters num informat = date9. format = date9.
);
insert into quarters

%do i = 0 %to -&quarter_count_back.+1 %by -1;

values(%sysfunc(intnx(quarter,&first_quarter.,&i.)))

%end;
;
quit;


run;
%mend asd;
%asd;
run;

此代码运行良好并创建了一个 table,它从 2016 年 4 月开始并按季度倒退。但是,如果我将 'first_quarter' 行中的数字更改为 -2、-3 等...代码始终从 JAN2016 开始,这对我来说没有任何意义!例如:

%let first_quarter = %sysfunc(intnx(month,&today.,-2));

如果我将这一行放在代码中,table 应该从 2016 年 3 月开始并按季度返回,这似乎合乎逻辑,但它不是,它从 2016 年 1 月开始。

关于我在这里做错了什么有什么想法吗?

谢谢!

INTNX 函数的默认对齐方式是间隔的开始。如果您希望它返回 3 个月,那与季度不同。您可以通过查看控制对齐的 INTNX 函数的第四个参数来调整这些。选项是:

  • 相同
  • 开始
  • 结束

如果您想要三个月,请尝试使用 MONTH.3 间隔而不是季度。

http://support.sas.com/documentation/cdl/en/lefunctionsref/63354/HTML/default/viewer.htm#p10v3sa3i4kfxfn1sovhi5xzxh8n.htm