说,我们想要创建一个包含上个月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;
此代码工作正常,并创建一个表,从APR2016开始,并按季度返回。但是,如果我更改了' first_quarter'换行-2,-3等......代码始终从JAN2016开始,这对我没有任何意义!例如:
%let first_quarter = %sysfunc(intnx(month,&today.,-2));
似乎合乎逻辑的是,如果我将这一行放在代码中,表格应从MAR2016开始并按季度返回,但事实并非如此,它从JAN2016开始。
关于我在这里做错了什么想法?
谢谢!
答案 0 :(得分:0)
INTNX函数的默认对齐方式是间隔的开头。如果你想让它回归3个月,那就不同于季度了。您可以通过查看控制对齐的INTNX函数的第四个参数来调整它们。选项包括:
如果您想要三个月,请尝试MONTH.3间隔而不是季度。