宏转义字符串

3

我正在尝试将一行代码打印到控制台,这行代码应该会打印一个宏变量和一段文本,文本中包含一个&符号。让我用一个简单的例子来说明:

%LET THIS_IS_A_MACRO_VAR = test; 
%PUT &THIS_IS_A_MACRO_VAR..&THIS_SHOULD_BE_TEXT;

运行时,我希望输出结果如下:
test.&THIS_SHOULD_BE_TEXT

作为一名来自PHP等语言的程序员,我原本期望有类似逃逸字符的东西。不幸的是,我找不到类似的东西。

我尝试过不同位置放置 ' 和 " ,但这导致了两个变量都被解释为宏变量或两个变量都没有被解释。同时使用 %NRQUOTE 也没有成功。最后,我尝试了连接两个字符串:"&THIS_IS_A_MACRO_VAR..&" || "THIS_SHOULD_BE_TEXT"

希望有人知道如何做到这一点。

2个回答

2

一种快速的方法是将&符号与文本分开,以防止其被解析为宏变量,方法如下:

%LET THIS_IS_A_MACRO_VAR = test; 
%PUT &THIS_IS_A_MACRO_VAR..%str(&)THIS_SHOULD_BE_TEXT;

这将会得到:
test.&THIS_SHOULD_BE_TEXT

1
我建议通常的做法是使用非解析转义来转义整个文本块。SAS确实具有非常强大(但非常令人困惑)的转义选项。
%nrstr(&this_should_be_text) 

如果只尝试解决一次,那将是最简单的。如果需要进行多次解决,则可能需要使用bquote或类似方法进行转义。有关更多详细信息,请参见Susan O'Connor的宏引用函数的秘密

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接