Sas 如何使用宏变量作为字符串?

Sas 如何使用宏变量作为字符串?,sas,sas-macro,Sas,Sas Macro,我要执行以下请求: data _null_; call symputx("test",findw(' x y z ','x')); run; 使用宏变量而不是 “x y z”零件,即 data _null_; call symputx("test",findw(&mv,'x')); run; 其中mv是一个宏变量,其值由一个我无法修改的宏函数计算。假设该值为: %let mv=x y z; 我的问题是,如果mv不包含引号,代码将无法工作: E

我要执行以下请求:

data _null_;    
  call symputx("test",findw(' x y z ','x'));    
run;
使用宏变量而不是
“x y z”
零件,即

data _null_;    
  call symputx("test",findw(&mv,'x'));    
run;
其中mv是一个宏变量,其值由一个我无法修改的宏函数计算。假设该值为:

%let mv=x y z;
我的问题是,如果mv不包含引号,代码将无法工作:

ERROR 388-185: Expecting an arithmetic operator.
我尝试使用
%str
添加它们(同样,我无法修改mv的计算方式,因此我必须使用
&mv
):

使用
%put
,我可以看到mv2的值是
'x y z'
但我得到了与之前类似的错误(不完全相同):

如果y尝试
%mv='xyz',但我不能做这样的事情,因为我必须使用
&mv
(或者我可以吗?)


我不明白怎么了,我该怎么办?

宏变量只是文本填充。宏变量必须是数据步骤中的合法SAS值

%let mv=123;
data _null_;
x="&mv";
put x=;
run;
比如说<代码>“
(双引号)解析宏变量,
(单引号)不解析宏变量

在您的示例中,您也可以在不使用symput的情况下执行此操作

%let mv2 = %sysfunc(findw(&mv,x,,ios))

重要的细节:SysFunc不引用任何参数(它会考虑引用一个字符,而不是引用任何东西)。,如果findw是以空格分隔的,则需要一种方法来获取该字段中的空格,因为留下空格不起作用。findw还存在一些特定问题,这与它有多个带有数字和字符可选参数的结构有关。

知道“和”之间的区别将非常有用,谢谢!
%let mv=123;
data _null_;
x="&mv";
put x=;
run;
%let mv2 = %sysfunc(findw(&mv,x,,ios))