SAS 为标签用法引用一个字符串
SAS quote a string for label usage
我想引用以下字符串 '%LLY+' 并将其用作绘图中的 Y 轴。
但我总是收到来自 SAS 的警告消息,说
警告:未解决宏 LLY 的明显调用。
或注意:当前正在处理的引用字符串已超过 262 个字符。您可能有不平衡的引号。
警告:未解决宏 LLY 的明显调用。
但实际上'%LLY'并不是宏变量。我的问题是如何在没有收到任何警告消息的情况下引用它?
data _null_;
CALL SYMPUTX('var1','%LLY+');
run;
使用单引号代替双引号。
当您使用双引号时,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
这是输出:
Obs 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
我想引用以下字符串 '%LLY+' 并将其用作绘图中的 Y 轴。
但我总是收到来自 SAS 的警告消息,说
警告:未解决宏 LLY 的明显调用。
或注意:当前正在处理的引用字符串已超过 262 个字符。您可能有不平衡的引号。 警告:未解决宏 LLY 的明显调用。
但实际上'%LLY'并不是宏变量。我的问题是如何在没有收到任何警告消息的情况下引用它?
data _null_;
CALL SYMPUTX('var1','%LLY+');
run;
使用单引号代替双引号。 当您使用双引号时,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
这是输出:
Obs 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