[英]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.