簡體   English   中英

如何在PROC SQL的WHERE語句中使用宏?

[英]How to use macro in WHERE statement in PROC SQL?

 %let CHECK_DATE = %sysfunc(SUM(&end_of_period.,1),yymmdd10.); 

 proc sql; 
            select * from table1
            where Source_Date < input(&CHECK_DATE.,yymmdd10.);  

 quit;

&CHECK_DATE是日期宏,格式為“ 2015-12-31”;

Source_Date是SAS日期值。

嘗試運行此代碼時出現此錯誤。 不知道為什么

           _
           22
            _
            200
ERROR 22-322: Syntax error, expecting one of the following: a name, a quoted string, a numeric constant, a datetime constant, 
              a missing value, (, +, -, BTRIM, CALCULATED, CASE, EXISTS, INPUT, NOT, PUT, SUBSTRING, TRANSLATE, USER, ^, ~.  

ERROR 200-322: The symbol is not recognized and will be ignored.


           _
           22
           76
ERROR 22-322: Syntax error, expecting one of the following: !, !!, &, *, **, +, ',', -, /, <, <=, <>, =, >, >=, ?, AND, BETWEEN, 
              CONTAINS, EQ, EQT, GE, GET, GT, GTT, IN, IS, LE, LET, LIKE, LT, LTT, NE, NET, NOT, NOTIN, OR, ^, ^=, |, ||, ~, ~=.  

ERROR 76-322: Syntax error, statement will be ignored.

我想這僅僅是因為您沒有在傳遞給INPUT()函數的字符文字周圍加上引號。

此代碼運行。

data table1;
  source_date=date();
  format source_date yymmdd10.;
run;

%let end_of_period=%sysfunc(date());
%put &=end_of_period ;

%let CHECK_DATE = %sysfunc(SUM(&end_of_period.,1),yymmdd10.);
%put &=check_date ;

proc sql;
  select * from table1
    where Source_Date < input("&CHECK_DATE",yymmdd10.)
  ;
quit;

但是,不使用&CHECK_DATE而僅使用&CHECK_DATE編寫where子句會容易&END_OF_PERIOD

proc sql;
  select * from table1
    where Source_Date < &end_of_period + 1
  ;
quit;

暫無
暫無

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

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