【问题标题】:sas - Apparent symbolic reference not resolvedsas - 未解析的明显符号引用
【发布时间】:2016-01-21 08:00:45
【问题描述】:

变量部门在数据步的值为M&S

set ttt;        
    DepartmentComp=Compress(DepartmentComp);*For use in making directories;       
    CALL SYMPUT('ggg',trim((division)));
    CALL SYMPUT('fff',trim((Department)))

日志显示 SYMBOLGEN:宏变量 FFF 解析为 M&S 警告:明显的符号引用 S 未解析。

当我怀疑它会影响程序时,如何消除警告?

【问题讨论】:

    标签: sas


    【解决方案1】:

    使用%superq() 屏蔽“&”并防止解析“&S”。这是一个给你的例子:

     60         data test;
     61         comp = "%superq(fff)";
     62         putlog "NOTE: comp=%superq(fff)";
     63         run;
    
     NOTE: comp=M&S
     NOTE: The data set WORK.TEST has 1 observations and 1 variables.
    

    【讨论】:

      【解决方案2】:

      如果您在后续数据步骤中使用这些变量,您可以使用 symget 来避免过早尝试解析(如下所示):

      data _null_;
         division='%myDiv';
         department='Food&Drink';
         call symputx('ggg',division);
         call symputx('fff',department);
      run;
      
      data someds;
         division=symget('ggg');
         department=symget('fff');
         putlog division= department=;
      run;
      

      注意事项:

      • 除了引发错误条件 (syscc=4) 之外,很难说该警告是否会影响您的程序(如果您创建 &s 的宏变量它会)。无论如何,最好尽可能避免警告。
      • 您可以使用 symputx 代替 symput,它会自动去除前导/尾随空格
      • floydn 提出的 %superq 方法非常适合直接用于宏逻辑。

      【讨论】:

      • 谢谢,但是如何在标签语句中使用宏 &fff,例如:label Division=&fff?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-30
      • 1970-01-01
      • 2017-10-08
      • 2012-02-10
      相关资源
      最近更新 更多