2016-04-25 20 views
0
%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'の形式の日付マクロです。PROC SQLのWHERE文でマクロを使用するには?

Source_Dateは、SASの日付の値です。

このコードを実行しようとするとこのエラーが発生します。私はあなたがINPUT()関数に渡すことを文字通りあなたのキャラクターの周りに引用符を入れていないからといって、それがあると仮定し、なぜ...

  _ 
      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. 
+0

私はそこに 'FROM'ステートメントのテーブルがあるとしますか?それ以外の場合は、 ''2015-12-31''が'&check_Date'の内容を正確に(引用符で囲んで)仮定すると、あなたのコードに特に問題はありません。 – Joe

+0

はい、テーブル名があります。私がペーストしていたとき、それは途切れてしまった。しかし、テーブル名を指定しても、私は実行時にエラーが発生します。 ログをチェックすると、&CHECK_DATEには値が表示されません。 ITはちょうど&CHECK_DATEと言う。 %put&CHECK_DATEも試しました。内部に値があるかどうかを確認します。 – TorontoUser

+0

完全なコードを投稿してログしてください。 – Reeza

答えて

2

わかりません。

このコードは実行されます。

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を使用して、ちょうど&END_OF_PERIODを使用して、where句をコーディングしていないがはるかに容易になるだろう。

proc sql; 
    select * from table1 
    where Source_Date < &end_of_period + 1 
    ; 
quit; 
関連する問題