簡體   English   中英

%NRQUOTE“刪除”的改進

[英]Improvement on %NRQUOTE 'removal'

我有以下一段有效的代碼,但是我想知道是否有人可以提出一種更好的“刪除” %nrquote 我必須添加一個可以正常工作的%SUBSTR函數,但我很想知道是否還有其他建議,並且是否有人可以幫助解釋為什么在mvar宏定義中沒有%let語句的情況下代碼無法正常工作。

/* Automatically generated by DI Studio - cannot change */
%let _where_clause = %nrquote(name = %'Henry%');
%let _mac1 = %nrquote(lemk);
%let _variable = weight;
%let _input0 = sashelp.class;
/* End of auto-generated code */

options mprint;

%macro mvar;
    %if &_where_clause ^= %then %do;
        /* Re-assign the _where_clause variable to 'remove' %nrquote */
        %let _where_clause = %substr(&_where_clause,1);
        where &_where_clause
    %end;
%mend mvar;

proc sql;
    select &_variable into :&_mac1
    from &_input0
    %mvar
    ;
quit;

沒有%let語句,代碼將失敗,並顯示以下錯誤:

NOTE: Line generated by the macro variable "_WHERE_CLAUSE".
1     name = 'Henry'
             -
             22
MPRINT(MVAR):   where name = '
NOTE: Line generated by the macro variable "_WHERE_CLAUSE".
1     name = 'Henry'
             -
             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, (, *, +, -, ALL, ANY,
              BTRIM, CALCULATED, CASE, INPUT, PUT, SELECT, SOME, SUBSTRING, TRANSLATE, USER.

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

114          ;
MPRINT(MVAR):  Henry'

您需要%UNQUOTE,這是%LET發生的情況,它取消了引號的引號。

Change 
where &_where_clause
to 
where %unquote(&_where_clause)

暫無
暫無

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

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