Macros 如何在SAS中屏蔽此字符串中的所有字符

Macros 如何在SAS中屏蔽此字符串中的所有字符,macros,sas,Macros,Sas,我将case-when语句作为宏变量,然后将其注入另一个宏,从而对一些代码进行参数化。因此,我需要将字符串转换为全局变量,但我正在努力屏蔽所有内容。我的代码的简化版本如下所示: %macro test(); %let x_var = case when var = 'Red' then 1 when var = 'Black***' then 2 when var = 'Deep Purple' then 3 else 4 end as var_sort ; %global var =

我将case-when语句作为宏变量,然后将其注入另一个宏,从而对一些代码进行参数化。因此,我需要将字符串转换为全局变量,但我正在努力屏蔽所有内容。我的代码的简化版本如下所示:

%macro test();

%let x_var = 

case when var = 'Red' then 1
when var = 'Black***' then 2
when var = 'Deep Purple' then 3
else 4
end as var_sort

;

%global var = %nrbquote(&x_reg.);

%mend;

%test;
…但是,由于我收到订单的日志错误,这无法掩盖一切:

ERROR: Invalid symbolic variable name =.
ERROR: Invalid symbolic variable name =.
ERROR: Invalid symbolic variable name '.
ERROR: Invalid symbolic variable name '.
ERROR: Invalid symbolic variable name 1.
请问有人能给我一个建议吗?当我试图屏蔽特殊字符时,我总是有点困惑,哪种方法是正确的


感谢使用
%global
语句定义宏变量(符号)。如果要为其赋值,请使用
%let
语句

%global var ;
%let var = %nrbquote(&x_reg.);
如果要将
var
设置为字面意义上的
&\u rx\u reg.
,则使用数据步骤

data _null_;
  call symputx('var','&x_reg.','g');
run;

%global
语句用于定义宏变量(符号)。如果要为其赋值,请使用
%let
语句

%global var ;
%let var = %nrbquote(&x_reg.);
如果要将
var
设置为字面意义上的
&\u rx\u reg.
,则使用数据步骤

data _null_;
  call symputx('var','&x_reg.','g');
run;

X_VAR中没有需要屏蔽的内容。您创建了一个名为
X_VAR
的宏变量,然后对全局宏变量使用
X_reg
?此外,格式可能有助于取代case/if-then逻辑。它更简单,不需要宏。X_VAR中没有任何东西需要屏蔽。您创建一个名为
X_VAR
的宏变量,然后对全局宏变量使用
X_reg
?此外,格式可能有助于取代case/if-then逻辑。它更简单,不需要宏。