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

时间:2015-11-13 17:48:16

标签: sas sas-macro

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

let name = abc;
put "&name";

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

%let name = abc;
%put &name; 

想象一下,我在代码的主体中编写语句,而不是在数据步骤中编写。

另外,第二种写法是:

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

2 个答案:

答案 0 :(得分:2)

%LET%PUT语句是SAS宏处理器的一部分,而不是基本SAS的一部分。 %(和&)触发器是激活宏处理器并允许它识别这些字符串在传递给SAS编译器/解释器之前需要处理的内容。

您不能使用

这样的赋值语句
x = 3.5 ;

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

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

  1. 如果宏变量NAME尚不存在,则将其定义为宏的本地变量。
  2. 在调用宏之前不会发生任何事情。 %macro语句开始定义宏。因此,直到相应%mend语句的所有代码都定义了宏。要执行它,您需要使用%test
  3. 等语法调用宏

答案 1 :(得分:1)

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

它们与非%版本完全不同 - 除非它的功能相同。您可以编写put "&mvar."; - 只要它在数据步骤中(因为这是数据步骤语句)。开放代码中有时允许宏命令/函数/语句(而不是其他命令)。

在实际的宏中写它或多或少是一样的。但是存在范围问题; <{1}}将不会在该宏之外可用,除非它已被声明为全局。