SAS和SQL新手,正在努力在PROC SQL中创建动态范围。
截至目前,代码被硬编码为 -
xxxx.xx_ccyymm_xx介于"201607"和"201706"之间。尝试创建一个动态范围,以便下个月运行时,它采用201608和201707的值。
*变量以字符串格式存储日期
有人请建议出路!!
提前衷心致谢。
在proc sql
中:
. . .
where xxxx.xx_ccyymm_xx <= put(today(), yymmn6.) and
xxxx.xx_ccyymm_xx <= put(intnx('year', today(), 1), yymmn6.)
您可以使用宏变量来保存字符串。 您可以使用 %SYSFUNC(( 调用 INTNX(( 函数来按月调整日期。 您可以使用自动宏变量 &SYSDATE9 以 DATE9 格式设置 SAS 会话开始的日期,或者调用 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 "¤t_month"
如果要根据运行时应用它:
xxxx.xx_ccyymm_xx between
left(convert(varchar,dateadd(month,-11,getdate()),112),6)
and
left(convert(varchar,getdate(),112),6)