Proc SQL中一年的动态日期范围通过查询

时间:2017-06-30 10:16:32

标签: sql sas proc

SAS和SQL的新手,并努力在PROC SQL中创建动态范围。

截至目前,代码被硬编码为 -

xxxx.xx_ccyymm_xx介于' 201607'和' 201706'。尝试创建一个动态范围,以便下个月运行时,它的值为201608和201707。

*变量以字符串格式

存储日期

有人请建议出路!!

真诚地感谢提前。

3 个答案:

答案 0 :(得分:1)

proc sql

. . .
where xxxx.xx_ccyymm_xx <= put(today(), yymmn6.) and
      xxxx.xx_ccyymm_xx <= put(intnx('year', today(), 1), yymmn6.)

答案 1 :(得分:1)

您可以使用宏变量来保存字符串。您可以使用%SYSFUNC()调用INTNX()函数来按月调整日期。您可以使用自动宏变量&amp; SYSDATE9来让您的SAS会话以DATE9格式启动,或者调用DATE()函数来获取实际的当前日期。

%let today=%sysfunc(date(),date9);

然后您可以从中生成YYYYMM格式字符串。

%let current_month=%sysfunc(putn("&today"d,yymmn6));
%let start_month=%sysfunc(intnx(month,"&today"d,-11),yymmn6);

然后在您的查询中使用宏变量

where myvar between "&start_month" and "&current_month"

答案 2 :(得分:0)

如果您希望根据运行时间进行申请:

xxxx.xx_ccyymm_xx between
  left(convert(varchar,dateadd(month,-11,getdate()),112),6)
    and 
  left(convert(varchar,getdate(),112),6)