SAS中引号中括号的处理

SAS中引号中括号的处理,sas,Sas,我有一个SAS程序,可以动态生成另一个SAS程序(不要问为什么),如下所示: data _null_;file="myFile.sas";x = "%nrstr(my sas code)";put x;run; "%nrstr(%myMacro(something,)" || "&macroVariable);"; '%nrstr(%myMacro)' || '(something,' || "&macroVariable" || ');' 我的代码如下所示: data

我有一个SAS程序,可以动态生成另一个SAS程序(不要问为什么),如下所示:

data _null_;file="myFile.sas";x = "%nrstr(my sas code)";put x;run;
"%nrstr(%myMacro(something,)" || "&macroVariable);";
'%nrstr(%myMacro)' || '(something,' || "&macroVariable" || ');' 
我的代码如下所示:

data _null_;file="myFile.sas";x = "%nrstr(my sas code)";put x;run;
"%nrstr(%myMacro(something,)" || "&macroVariable);";
'%nrstr(%myMacro)' || '(something,' || "&macroVariable" || ');' 
问题是第一个
正在关闭
%myMacro
,尽管我真的希望它关闭
%nrstr
,所以不要打印
%myMacro(某物,*valueOfMacroVariable)它打印
%myMacro(something,)*valueOfMacroVariable)这不起作用

问题是宏变量不能在
%nrstr
内部解析,但如果我不使用
%nrstr
进行包装,它会在我
放入
而不是打印到文件时进行计算。我想要的是
x=“%myMacro(something,¯oVariable);”
,但就像我说的,这不会打印到新程序,它只是运行宏,我不想要

有没有办法让我转义
在我的
%nrstr
中,这样它就可以把它当作一个任意字符,而不会试图将它与相应的
配对)
,这样
就可以用来关闭
%nrstr


善意的问候

%
是如何在宏引用函数中转义内容的

因此,这将起作用:

data _null_;
  x="%nrstr(%myMacro%(something,)" || '&macroVariable);';
  put x=;
run;
注意括号前的
%


但是,如果您是从数据构造此函数,可能会有更好的选项,具体取决于您的操作方式。

%
是如何在宏引用函数中转义的

因此,这将起作用:

data _null_;
  x="%nrstr(%myMacro%(something,)" || '&macroVariable);';
  put x=;
run;
注意括号前的
%


但是,如果您是从数据构造此函数(希望如此),可能会有更好的选项,具体取决于您的操作方式。

您只需要在要引用的字符串周围引用
%NRTSTR()
宏,在本例中是宏名。另外,除非要展开宏变量或宏调用,否则不要使用双引号。因此,如果您不希望宏调用或宏变量引用在以后执行(可能是使用call execute将它们推到堆栈上),那么您可以像这样构建字符串

'%nrstr(%myMacro)' || '(something,' || '%nrstr(&macroVariable)' || ');' 
如果您确实希望宏引用立即运行,但不希望宏调用运行,那么您可能希望执行以下操作:

data _null_;file="myFile.sas";x = "%nrstr(my sas code)";put x;run;
"%nrstr(%myMacro(something,)" || "&macroVariable);";
'%nrstr(%myMacro)' || '(something,' || "&macroVariable" || ');' 

您只需要将
%NRTSTR()
宏引号括在要引用的字符串周围,在本例中为宏名称。另外,除非要展开宏变量或宏调用,否则不要使用双引号。因此,如果您不希望宏调用或宏变量引用在以后执行(可能是使用call execute将它们推到堆栈上),那么您可以像这样构建字符串

'%nrstr(%myMacro)' || '(something,' || '%nrstr(&macroVariable)' || ');' 
如果您确实希望宏引用立即运行,但不希望宏调用运行,那么您可能希望执行以下操作:

data _null_;file="myFile.sas";x = "%nrstr(my sas code)";put x;run;
"%nrstr(%myMacro(something,)" || "&macroVariable);";
'%nrstr(%myMacro)' || '(something,' || "&macroVariable" || ');' 

%
放在
前面(
无助于我发现。然后你会遇到另一个问题(或者更可能是几个问题)。汤姆的答案可能是你真正想去的地方。我在回答你的直接问题-
%
逃避
,在我的示例中尝试一下,你会发现它确实如此。将
%
放在
前面(
无助于我发现。然后你会遇到另一个问题(或者更可能是几个问题)。Tom的答案可能是你真正想去的地方。我在回答你的直接问题-
%
逃避
,在我的示例中尝试一下,您会看到它确实如此。