首页 > 解决方案 > SAS引用一个字符串以供标签使用

问题描述

我想引用以下字符串 '%LLY+' 并将其用作图中的 Y 轴。

但我总是收到来自 SAS 的警告信息说

警告:未解决对宏 LLY 的明显调用。

或 注意:当前正在处理的引用字符串的长度已超过 262 个字符。您可能有不平衡的引号。警告:未解决对宏 LLY 的明显调用。

但实际上 '%LLY' 不是宏变量。我的问题是如何在不收到任何警告消息的情况下引用此内容?

data _null_;
 CALL SYMPUTX('var1','%LLY+');
 run;

标签: sassas-macro

解决方案


使用单引号而不是双引号。当您有双引号时,SAS 将尝试将其作为宏来解决。

data _null_;
 CALL SYMPUTX('var1','%LLY+');
run;

编辑:

data _null_;
  %*option 1;
 CALL SYMPUTX('var1',%nrstr('%LLY+'));
 
 %*option 2;
 var = '%LLY+';
 call symputx('var2', var);
 
  %*option 3;
 call symputx('var3', '%LLY+');
run;

data demo;
var1 = symget('var1');
var2 = symget('var2');
var3 = symget('var3');
run;

proc print data=demo;
run;

这是显示没有问题的日志,如果您收到错误,它们来自其他地方。

69         data _null_;
 70           %*option 1;
 71          CALL SYMPUTX('var1',%nrstr('%LLY+'));
 72         
 73          %*option 2;
 74          var = '%LLY+';
 75          call symputx('var2', var);
 76         
 77           %*option 3;
 78          call symputx('var3', '%LLY+');
 79         run;
 
 NOTE: DATA statement used (Total process time):
       real time           0.00 seconds
       cpu time            0.00 seconds
       
 
 80         
 81         data demo;
 82         var1 = symget('var1');
 83         var2 = symget('var2');
 84         var3 = symget('var3');
 85         run;
 
 NOTE: The data set WORK.DEMO has 1 observations and 3 variables.
 NOTE: DATA statement used (Total process time):
       real time           0.00 seconds
       cpu time            0.00 seconds
       
 
 86         
 87         proc print data=demo;
 88         run;
 
 NOTE: There were 1 observations read from the data set WORK.DEMO.
 NOTE: PROCEDURE PRINT used (Total process time):
       real time           0.01 seconds
       cpu time            0.02 seconds

这是输出:

观测值 var1 var2 var3

1 %LLY+ %LLY+ %LLY+

编辑2:

如果你使用 %PUT 这就是你会得到的:

 1          OPTIONS NONOTES NOSTIMER NOSOURCE NOSYNTAXCHECK;
 WARNING: Apparent invocation of macro LLY not resolved.
 68         
 69         
 70             %Put &var1.;
 %LLY+
 71             %put &var2.;
 WARNING: Apparent invocation of macro LLY not resolved.
 %LLY+
 72             %put &var3.;
 WARNING: Apparent invocation of macro LLY not resolved.
 %LLY+
 73         
 74         OPTIONS NONOTES NOSTIMER NOSOURCE NOSYNTAXCHECK;
 84   
   

推荐阅读