SAS中引号中括号的处理
我有一个SAS程序,可以动态生成另一个SAS程序(不要问为什么),如下所示:SAS中引号中括号的处理,sas,Sas,我有一个SAS程序,可以动态生成另一个SAS程序(不要问为什么),如下所示: data _null_;file="myFile.sas";x = "%nrstr(my sas code)";put x;run; "%nrstr(%myMacro(something,)" || "¯oVariable);"; '%nrstr(%myMacro)' || '(something,' || "¯oVariable" || ');' 我的代码如下所示: data
data _null_;file="myFile.sas";x = "%nrstr(my sas code)";put x;run;
"%nrstr(%myMacro(something,)" || "¯oVariable);";
'%nrstr(%myMacro)' || '(something,' || "¯oVariable" || ');'
我的代码如下所示:
data _null_;file="myFile.sas";x = "%nrstr(my sas code)";put x;run;
"%nrstr(%myMacro(something,)" || "¯oVariable);";
'%nrstr(%myMacro)' || '(something,' || "¯oVariable" || ');'
问题是第一个)
正在关闭%myMacro
,尽管我真的希望它关闭%nrstr
,所以不要打印%myMacro(某物,*valueOfMacroVariable)代码>它打印%myMacro(something,)*valueOfMacroVariable)代码>这不起作用
问题是宏变量不能在%nrstr
内部解析,但如果我不使用%nrstr
进行包装,它会在我放入
而不是打印到文件时进行计算。我想要的是x=“%myMacro(something,¯oVariable);”
,但就像我说的,这不会打印到新程序,它只是运行宏,我不想要
有没有办法让我转义(
在我的%nrstr
中,这样它就可以把它当作一个任意字符,而不会试图将它与相应的配对)
,这样)
就可以用来关闭%nrstr
善意的问候%
是如何在宏引用函数中转义内容的
因此,这将起作用:
data _null_;
x="%nrstr(%myMacro%(something,)" || '¯oVariable);';
put x=;
run;
注意括号前的%
但是,如果您是从数据构造此函数,可能会有更好的选项,具体取决于您的操作方式。%
是如何在宏引用函数中转义的
因此,这将起作用:
data _null_;
x="%nrstr(%myMacro%(something,)" || '¯oVariable);';
put x=;
run;
注意括号前的%
但是,如果您是从数据构造此函数(希望如此),可能会有更好的选项,具体取决于您的操作方式。您只需要在要引用的字符串周围引用%NRTSTR()
宏,在本例中是宏名。另外,除非要展开宏变量或宏调用,否则不要使用双引号。因此,如果您不希望宏调用或宏变量引用在以后执行(可能是使用call execute将它们推到堆栈上),那么您可以像这样构建字符串
'%nrstr(%myMacro)' || '(something,' || '%nrstr(¯oVariable)' || ');'
如果您确实希望宏引用立即运行,但不希望宏调用运行,那么您可能希望执行以下操作:
data _null_;file="myFile.sas";x = "%nrstr(my sas code)";put x;run;
"%nrstr(%myMacro(something,)" || "¯oVariable);";
'%nrstr(%myMacro)' || '(something,' || "¯oVariable" || ');'
您只需要将%NRTSTR()
宏引号括在要引用的字符串周围,在本例中为宏名称。另外,除非要展开宏变量或宏调用,否则不要使用双引号。因此,如果您不希望宏调用或宏变量引用在以后执行(可能是使用call execute将它们推到堆栈上),那么您可以像这样构建字符串
'%nrstr(%myMacro)' || '(something,' || '%nrstr(¯oVariable)' || ');'
如果您确实希望宏引用立即运行,但不希望宏调用运行,那么您可能希望执行以下操作:
data _null_;file="myFile.sas";x = "%nrstr(my sas code)";put x;run;
"%nrstr(%myMacro(something,)" || "¯oVariable);";
'%nrstr(%myMacro)' || '(something,' || "¯oVariable" || ');'
将%
放在前面(
无助于我发现。然后你会遇到另一个问题(或者更可能是几个问题)。汤姆的答案可能是你真正想去的地方。我在回答你的直接问题-%
逃避(
,在我的示例中尝试一下,你会发现它确实如此。将%
放在前面(
无助于我发现。然后你会遇到另一个问题(或者更可能是几个问题)。Tom的答案可能是你真正想去的地方。我在回答你的直接问题-%
逃避(
,在我的示例中尝试一下,您会看到它确实如此。