为什么 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 ;
在数据步骤之外(或某些支持这些类型语句的过程)。
对于第二个问题,如果将宏语句包装在宏定义中,那么主要影响将是。
- 宏变量
NAME
如果尚不存在,将被定义为宏的局部变量。
- 在您调用宏之前,什么都不会发生。
%macro
语句开始宏的定义。所以所有的代码直到对应的 %mend
语句定义宏。要执行它,您需要使用 %test
. 等语法调用宏
在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 ;
在数据步骤之外(或某些支持这些类型语句的过程)。
对于第二个问题,如果将宏语句包装在宏定义中,那么主要影响将是。
- 宏变量
NAME
如果尚不存在,将被定义为宏的局部变量。 - 在您调用宏之前,什么都不会发生。
%macro
语句开始宏的定义。所以所有的代码直到对应的%mend
语句定义宏。要执行它,您需要使用%test
. 等语法调用宏