宏的历史';在';SAS中的操作员

宏的历史';在';SAS中的操作员,sas,Sas,我发现中的操作符在实现上有些混乱。这似乎是由于其实施的历史。比如说根据, 你可能还记得“in”一开始并不受欢迎,所以是的 在V9.13中禁用 这意味着在同一时间存在不同的实现 我有几个问题: 在中,宏和非宏上下文中的实现是否不同 在宏中的in运算符之前使用了什么,该运算符提示创建宏“in” 是否因为宏功能最初不是SAS的一部分,所以在中的未在宏中实现 在先前版本的SAS(9.4之前版本)中,中的操作员的实施方式是否不同?如果是的话,那么它的实施与当前的方法有何不同 SAS的特质往往更多地由历史偶

我发现中的
操作符在实现上有些混乱。这似乎是由于其实施的历史。比如说根据,

你可能还记得“in”一开始并不受欢迎,所以是的 在V9.13中禁用

这意味着在同一时间存在不同的实现

我有几个问题:

  • 中,宏和非宏上下文中的
    实现是否不同
    
  • 在宏中的
    in
    运算符之前使用了什么,该运算符提示创建宏“in”
  • 是否因为宏功能最初不是SAS的一部分,所以在
  • 中的
    未在宏中实现
    
  • 在先前版本的SAS(9.4之前版本)中,
  • 中的
    操作员的实施方式是否不同?如果是的话,那么它的实施与当前的方法有何不同
    
    SAS的特质往往更多地由历史偶然事件而非客观推理或设计决定。在我看来,拥有这些历史知识将有助于理解SAS语言和系统

    以下是我的发现,稍加挖掘:

  • 据我所知,除了不需要引号的宏版本外,没有任何差异
  • 人们编写自己的宏来完成这项工作<代码>%sysfunc(indexw(要搜索的列表,word))
  • 似乎是一种流行的实现
  • 我不知道为什么这个特定的操作符最初被排除在宏语言之外。自从宏语言发布以来,许多其他操作符及其助记符在宏和非宏上下文中都工作得非常好,没有任何麻烦。您需要询问原始宏语言开发人员
  • 据我所知,历史如下:

    • 9.0之前的版本:中的
      #
      未在SAS宏语言中实现。用户可能在
      宏中编写了自己的
      %
    • 在9.0中,
      #
      中的
      是用SAS宏语言实现的,没有任何禁用它们的选项。在某些情况下,这可能会改变现有用户定义宏在处理包含这些运算符的字符串时的行为-我怀疑这就是为什么这个新功能“最初不受欢迎”的原因
    • 在9.1.2和9.1.3中,中的
      #
      完全从宏语言中删除(这一次可能会让在9.0中引入此功能后编写宏的人感到不安…)
    • 在9.2+中,它们被重新实现,默认情况下被禁用,我们获得了
      minoperator
      mindelimiter
      选项来控制它们的行为
    • 在将来的某些版本(9.5或更高版本)中,我们可能会在宏运算符中得到一个
      %,正如在执行
      中名为
      %的(用户定义的)宏时SAS 9.4中显示的注释所暗示的:

      注意:%IN将在将来的SAS系统版本中成为SAS宏语言的保留关键字。更改 此宏将避免将来的冲突


  • 那篇文章引用了
    操作符中的
    %。以前,宏语言中没有与
    中的运算符等价的运算符。我猜这不是很受欢迎,因为语法很糟糕,与语句语法中的常规
    不同。你是说SAS曾经在
    运算符中实现了
    %吗?因为使用当前的
    minoperator
    选项,所使用的语法是
    中的
    ,不带宏标记
    %
    。在
    中使用
    %会生成一个注释、一个警告,并且不会执行预期的操作。很抱歉,我无意这么说,我只是想清楚地区分
    操作符中的宏
    ,以及
    操作符中的常规
    ,或者说Lorem,但这并不是您在这里要问的问题。我想,你可以在Communities.sas.com上问这样的问题,但老实说,我不知道你会得到你想要的东西。为了明确你的第一点,你是说与
    data\u null\u;如果在('foo')中加'foo',然后加'bar';运行
    %macro Test()/minoperator;%如果foo在(foo)%中,则%put bar;%修补;%Test()
    ,区别在于前者中的
    foo
    必须用引号括起来,而后者则不能用引号括起来?是的,就像宏语言的其余部分一样。确切地说,1在宏语言中是通用的,而不仅仅是in运算符。IN()不是一个在许多其他语言或系统中都可用的运算符,因此首先拥有它是一个很好的特性。大多数语言要求您使用多个或多个条件,或者可能有自己的不同实现。