【问题标题】:Assign a SAS macro variable with quotes to a data step var将带引号的 SAS 宏变量分配给数据步骤 var
【发布时间】:2016-02-01 21:28:57
【问题描述】:

如何使以下语句有效?

%let qccomment= /n ORACLE execute error: ORA-20001: User xyxlll
        does not have acccess to the gva BA_DEV ORA-06512: at 
        "M_UTIL", line 51 ORA-06512: at line 1. /nTable XY_XY does not exist 
        (Oracle extract data failed);   

%put &qccomment;
data null;
    i ="&qccomment";
    put i;
run;

返回错误 错误 386-185:需要算术表达式。

错误 200-322:符号无法识别,将被忽略。

ERROR 76-322:语法错误,语句将被忽略。

【问题讨论】:

    标签: sas


    【解决方案1】:

    你需要使用宏引用功能来解决这个问题,

    /* Using %BQUOTE in let statement to quote the string */
    %let qccomment= %bquote(/n ORACLE execute error: ORA-20001: User xyxlll
        does not have acccess to the gva BA_DEV ORA-06512: at 
        "M_UTIL", line 51 ORA-06512: at line 1. /nTable XY_XY does not exist 
        (Oracle extract data failed));
    
    %put &qccomment;
    data null;
        i ="&qccomment";
        put i;
    run;
    

    日志

    11   %let qccomment= %bquote(/n ORACLE execute error: ORA-20001: User xyxlll
    12           does not have acccess to the gva BA_DEV ORA-06512: at
    13           "M_UTIL", line 51 ORA-06512: at line 1. /nTable XY_XY does not     exist
    14           (Oracle extract data failed));
    15
    16   %put &qccomment;
    /n ORACLE execute error: ORA-20001: User xyxlll         does not have     acccess to the gva BA_DEV
    ORA-06512: at         "M_UTIL", line 51 ORA-06512: at line 1. /nTable XY_XY     does not exist
       (Oracle extract data failed)
    17   data null;
    18       i ="&qccomment";
    19       put i;
    20   run;
    
    /n ORACLE execute error: ORA-20001: User xyxlll         does not have acccess to the gva BA_DEV
    ORA-06512: at         "M_UTIL", line 51 ORA-06512: at line 1. /nTable XY_XY does not exist
       (Oracle extract data failed)
    NOTE: The data set WORK.NULL has 1 observations and 1 variables.
    NOTE: DATA statement used (Total process time):
          real time           0.08 seconds
          cpu time            0.00 seconds
    

    【讨论】:

    • 谢谢你,维尚。它可以工作,但在我的实际情况下,宏变量是自动生成的,但不是直接分配的。以前的汤姆的解决方案可以帮助我。 :)
    • @Greatvia- 如果您可以在问题中提及与您的要求相同的内容,那就太好了,就像在您的问题中您要求解决错误一样。今后请牢记这一点。
    【解决方案2】:

    您可以使用 SYMGET() 函数来检索宏变量的值,而不必担心任何宏引用(至少在进行检索的步骤中)。

    data _null_;
       i = symget('qcomment');
       put i= ;
    run;
    

    如果您确实需要引用宏变量的值并使用它来生成带引号的字符串,那么请使用 QUOTE() 函数确保任何嵌入的引号都正确加倍,以便生成的字符串是有效的字符串文字。

    data _null_;
       put %sysfunc(quote(&qcomment));
    run;
    

    【讨论】:

      猜你喜欢
      • 2013-09-05
      • 1970-01-01
      • 2021-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多