SAS宏中的特殊字符列表

SAS宏中的特殊字符列表,sas,sas-macro,Sas,Sas Macro,我想知道哪些字符在SAS宏中可以安全使用 所以我这里所说的特殊字符是指在任何上下文中都可以在SAS中扮演特定角色的任何字符(或字符组)。我对关键词(由a-z1-9chars组成)不太感兴趣 例如=^=%,@是特殊的(不确定@是否在SAS中实际使用,但它用于doc,因此仍然算作“所有用途都不安全”的参数) 但是$呢~§{}°等 这应该包括PROC-SQL中的特殊字符 我想在我的代码中使用其中一些字符并赋予它们特殊的含义,但我不想与任何现有的用法冲突(我对~)特别感兴趣。宏代码中的主要触发器是&和%

我想知道哪些字符在
SAS
宏中可以安全使用

所以我这里所说的特殊字符是指在任何上下文中都可以在
SAS
中扮演特定角色的任何字符(或字符组)。我对关键词(由
a-z
1-9
chars组成)不太感兴趣

例如
=
^=
%
@
是特殊的(不确定
@
是否在
SAS
中实际使用,但它用于doc,因此仍然算作“所有用途都不安全”的参数)

但是
$
~
§
{
}
°

这应该包括
PROC-SQL
中的特殊字符


我想在我的代码中使用其中一些字符并赋予它们特殊的含义,但我不想与任何现有的用法冲突(我对
~
)特别感兴趣。

宏代码中的主要触发器是
&
%
,它们用于触发宏变量引用和宏语句,函数或宏调用

(分号)在宏代码(如SAS代码)中用于指示语句的结束

要将参数传递到宏参数中,您主要需要考虑
(逗号)。但您还需要避免不平衡的
()
。按位置传递参数值时,应避免使用
=

您可以通过在值周围添加引号或额外的
()
来保护它们。但这些字符成为传递的值的一部分。您可以使用宏引用来保护它们

 %mymac(parm1='1,200',parm2=(1,200),parm3=%str(1,200),parm4="a(b")
只要调用使用命名参数,就可以不加引号地包含等号

 %mymac(parm1=a=b)
也许我能帮你~, 查看表格
比较运算符和

逻辑运算符

一点一般参考:

我认为标准英文键盘上的绝大多数字符都是在SAS语言的某个地方使用的

请举例说明:

  • $
    用于格式名称、put/input语句、正则表达式定义
  • “或”运算符在某些环境中
  • ~
    非运算符
  • §
    据我所知未使用
  • {}
    可用于数据步数组引用和定义
  • °
    据我所知未使用

正如Tom在他的回答中已经明确指出的那样,以上这些在宏观环境中都没有什么特别的作用。

除了前面的答案

  • %
    也用于在程序中包含文件

  • 由于引号不平衡,使用特殊字符可能会导致代码陷入循环中

如果遇到这种情况,请提交下面的神奇字符串:

*';*";*/;run;

不知道你在这里是什么意思。任何字符(在会话使用的编码限制范围内)都可以用作数据。它们可以用作数据,但例如,如果我有一个参数
param1=a=b
,如果我执行宏函数
%fun(param1)
,而不显式获取参数名,我就会遇到麻烦(除非参数名是“代码> < < /代码>,我知道我在做什么。”听起来像是在询问宏处理,这确实是一种不同于SAS的语言。因此<代码>=<代码>将不是一个我认为“安全”的字符。例如,<代码> ~<代码>是安全的吗?它在语言的任何部分都有特定用途吗?(在
R
中用于公式)@Moody_Mudskipper你应该用具体的代码和例子为你正在做的具体事情提出问题。你所说的很多问题都在SAS社区得到了很好的解决。非常感谢,你是否知道
是否在某个地方使用过?是的,可以在输入语句和其他地方使用。我正在寻找如此神奇的字符串,我每天都会被困在这些循环中好几次,这对我的神经不好:)。我会尽可能地测试它(如果它工作正常,我会向上投票)。我还扔了一些
%mend
end
在那里,但可能没有必要。SAS Enterprise Guide用于将此字符串添加到循环场景的自动生成代码的开头。实际上,我刚刚在日志中看到我的EG使用它
;*'*“;*/;退出;运行;
,但这还不够,而且我仍然会遇到一些情况,迫使我重新启动软件并重新运行所有未保存的工作,这非常令人沮丧。