【问题标题】:SAS: How to prevent "WARNING: Apparent invocation of macro not resolved" within a libname statement?SAS:如何在 libname 语句中防止“警告:未解析宏的明显调用”?
【发布时间】:2020-06-16 08:42:17
【问题描述】:

我必须在 LIBNAME 语句中使用类似于以下密码的密码。密码包含一个百分号 (%),这会导致 WARNING: Apparent invocation of macro PS not resolved:

LIBNAME EXAMPLE ORACLE
user=user1
password="'thisisapassword%PS|("
PATH=PATH1
SCHEMA=SCHEMA1
;

由于密码中已经包含单引号,所以我必须对密码使用双引号,最终由于使用了百分号而导致警告

我找不到如何逃避这个 % 或任何其他方式来防止这个警告发生

【问题讨论】:

    标签: sas


    【解决方案1】:

    将密码用单引号括起来,以防止与宏系统交互。如果密码字面上包含单引号,则将单引号内的单引号加倍。

    例子:

    PROC PWENCODE IN='''thisisapassword%PS|(';
    /*                ^^                         ^^ showing where doubling up is needed */ 
    

    来自文档“Using Quotation Marks with Character Constants我的粗体

    如果字符常量包含单引号,请将其括在双引号中。例如,要将字符值Tom's 指定为常量,请输入以下内容:

    name="Tom's";

    写相同字符串的另一种方法是将字符串括在单引号中,并将撇号表示为两个连续的引号。 SAS 将两个连续的引号视为一个引号

    name='Tom''s';

    同样的原理也适用于双引号和字符值Tom"s

    name="Tom""s";

    【讨论】:

      【解决方案2】:

      也许你可以测试一下。我无法测试,因为我们不在密码中使用此字符,但这可以在没有警告的情况下运行:

      PROC PWENCODE IN="'thisisapassword%PS|(";
      run;
      %put &_PWENCODE;
      
      LIBNAME EXAMPLE ORACLE
      user=user1
      password="&_PWENCODE"
      PATH=PATH1
      SCHEMA=SCHEMA1
      ;
      

      【讨论】:

        猜你喜欢
        • 2022-10-23
        • 1970-01-01
        • 1970-01-01
        • 2021-10-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多