簡體   English   中英

Proc SQL直通查詢中的一年動態日期范圍

[英]dynamic date range of one year in Proc SQL pass through query

SAS和SQL的新手,正在努力在PROC SQL中創建動態范圍。

截至目前,代碼已被硬編碼為-

在'201607'和'201706'之間的xxxx.xx_ccyymm_xx。 嘗試創建動態范圍,以便在下個月運行該動態范圍時,其取值為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 "&current_month"

如果要基於運行時應用它:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM