我想每个月都自动化sas代码

我想每个月都自动化sas代码,sas,Sas,我计算了大约12个指标(比如最近12个月每个月的销售额)。每个月,我都需要手动更改月份。如果有任何方法可以使它自动化,那将是非常有帮助的。我的代码是 proc sql; create table inter.calls as select a.district_name, sum(01JAN2016,01FEB2016,01MAR2016)/terr_count as q1_workingdays, sum(01APR2016,01JUN2016,01MAY2016

我计算了大约12个指标(比如最近12个月每个月的销售额)。每个月,我都需要手动更改月份。如果有任何方法可以使它自动化,那将是非常有帮助的。我的代码是

proc sql;
create table inter.calls as
select a.district_name, 
       sum(01JAN2016,01FEB2016,01MAR2016)/terr_count as q1_workingdays,
       sum(01APR2016,01JUN2016,01MAY2016)/terr_count as q2_workingdays,
       sum(01AUG2016,01SEP2016,01JUL2016)/terr_count as q3_workingdays,
       sum(01NOV2016,01DEC2016,01OCT2016)/terr_count as q4_workingdays
from inter.calls_made_bymon_reg3 a left join inter.territory_count b
on a.district_name=b.district_name;
quit;
现在,当我为2017年1月刷新时,我需要从2016年2月改为2017年1月,最迟12个月。每次手动更改代码都很困难


如果我得到任何帮助,我将非常感激

很难完全理解您的问题,因为正如Reeza提到的,
sum()
函数中的参数无效(名称以数字开头)

然而,我确实理解不想在各地手动更改日期的愿望。您可能会发现下面这样的宏很有用:

%macro prev_month(n);
    %let latest_date = %sysfunc(intnx(month,%sysfunc(inputn(&latest_month.,monyy7.)),-&n.));
    days_%sysfunc(putn(&latest_date.,monyy7.))
%mend prev_month;
然后在查询中使用它,如下所示:

%let latest_month = JAN2017;
proc sql;
    create table inter.calls as
    select a.district_name, 
           sum(%prev_month(11),%prev_month(10),%prev_month(9))/terr_count as q1_workingdays,
           sum(%prev_month(8) ,%prev_month(7) ,%prev_month(6))/terr_count as q2_workingdays,
           sum(%prev_month(5) ,%prev_month(4) ,%prev_month(3))/terr_count as q3_workingdays,
           sum(%prev_month(2) ,%prev_month(1) ,%prev_month(0))/terr_count as q4_workingdays
    from inter.calls_made_bymon_reg3 a left join inter.territory_count b
    on a.district_name=b.district_name;
quit;

希望有帮助。

这不是有效的SAS代码,因为它们不是有效的SAS名称。我强烈建议您重新格式化数据,然后使用QTR()函数来确定季度,您可以很容易地将其自动化。嗨,Reeza,很抱歉错误地提到了它,它将如下所示:
sum(2016年1月1日,2016年2月1日…)
感谢@Reeza提供QTR()函数,如何更改最近每个月的季度。假设2017年1月是最近的一个月,那么我的第四季度应该是
sum(2016年11月、2016年12月、2017年1月)
有没有办法做到这一点@谢谢你的密码。我有点怀疑!!如果我有一个像days\u 01 Jan2016这样的列,那么我应该调用sum函数作为:
sum(days\u%prev\u month(11)
@HugsIt不起作用。我们似乎无法在sas函数中调用宏。这会给我带来错误@Hugs@Shalini,我认为宏定义中的
导致了问题。我已编辑了答案。是否有效?