SAS

时间:2017-04-20 17:29:32

标签: sas

我发现in运算符在其实现中有些混乱。看来这是由于其实施的历史。例如,根据sascommunity.org wiki

  

你可能还记得“in”最初没有受到好评,所以它确实如此   在V9.13中禁用。

这意味着一次存在不同的实现。

我遇到的一些问题是:

  1. 在宏观和非宏观环境中,in的实施方式有所不同吗?
  2. 在宏中使用in运算符之前使用了什么来促使创建宏'in'?
  3. 是否在宏中未实现in,因为宏工具最初不是SAS的一部分?
  4. in运算符在先前版本的SAS(9.4之前版本)中的实现方式是否有所不同?如果是这样,那么它的实现与当前的方法有何不同?
  5. SAS的特质往往更多地是由历史偶然性而非客观推理或设计决定的。在我看来,拥有这样的历史知识将有助于理解SAS语言和系统。

1 个答案:

答案 0 :(得分:2)

这是我发现的东西,有点挖掘:

  1. 据我所知,没有任何差异,除了不需要引号的宏版本。
  2. 人们写了自己的宏来完成这项工作。 %sysfunc(indexw(list to search,word))似乎是一种流行的实施方式。
  3. 我不知道为什么这个特定的运算符最初被排除在宏语言之外。自宏语言发布以来,许多其他运算符及其助记符在宏观和非宏观环境中都运行良好,没有任何麻烦。您需要询问原始的宏语言开发人员。
  4. 据我所知,历史如下:

    • 9.0之前:in#未在SAS宏语言中实现。用户可能已经编写了自己的%in宏。
    • 9.0 in#以SAS宏语言实现,没有任何选项可以禁用它们。在某些情况下,当处理包含这些运算符的字符串时,这可能会改变现有用户定义宏的行为 - 我怀疑这就是为什么这个新功能“最初没有得到好评”。
    • 在9.1.2和9.1.3中,in#已从宏语言完全删除(可能这次扰乱了在此功能之后编写宏的人在9.0 ...中介绍。
    • 在9.2+中,它们已重新实施,默认情况下已停用,我们获得了minoperatormindelimiter选项来控制其行为。
    • 在将来的某个版本(9.5或更高版本)中,我们可能会得到一个%in宏运算符,正如执行一个名为{{1的(用户定义的)宏的SAS 9.4中显示的注释所暗示的那样}}:

        

      注意:%IN将成为SAS系统未来版本中SAS宏语言的保留关键字。改变名称   这个宏将避免未来的冲突。