为什么 put 和 let 语句需要在 SAS 中以 % 符号为前缀

Why does the put and let statements need to be prefixed by a % sign in SAS

在SAS中,为什么我们不能写

let name = abc;
put "&name";

为什么我们必须像这样包含 % 符号:

%let name = abc;
%put &name; 

假设我在代码的主体中而不是在数据步骤中编写语句。

还有,第二种写法是不是一样:

%macro test;
%let name = abc;
%put &name; 
%mend;

%let%put 是 SAS 宏语言的一部分。宏语言语句(有一个或两个特殊的例外)以 % 为前缀,以告诉 SAS 宏解析器对其进行操作。

他们做的事情与非% 版本完全不同——除非结果是一样的。您 可以 编写 put "&mvar."; - 只要它在数据步骤中(因为那是数据步骤语句)。宏 commands/functions/statements 有时可以在开放代码中使用(而在其他代码中则不允许)。

在实际宏中编写它或多或少是相同的。但是,存在范围界定问题; &name 在该宏之外将不可用,除非它被声明为全局的。

%LET%PUT 语句是 SAS 宏处理器的一部分,而不是基本 SAS 的一部分。 %(和 &)触发器激活宏处理器并允许它识别这些字符串在传递给 SAS compiler/interpreter.

之前需要处理。

您不能使用像

这样的赋值语句
x = 3.5 ;

在数据步骤之外(或某些支持这些类型语句的过程)。

对于第二个问题,如果将宏语句包装在宏定义中,那么主要影响将是。

  1. 宏变量 NAME 如果尚不存在,将被定义为宏的局部变量。
  2. 在您调用宏之前,什么都不会发生。 %macro 语句开始宏的定义。所以所有的代码直到对应的 %mend 语句定义宏。要执行它,您需要使用 %test.
  3. 等语法调用宏