在SAS中,为什么我们不能写
let name = abc;
put "&name";
为什么我们必须像这样包含%符号:
%let name = abc;
%put &name;
想象一下,我在代码的主体中编写语句,而不是在数据步骤中编写。
另外,第二种写法是:
%macro test;
%let name = abc;
%put &name;
%mend;
答案 0 :(得分:2)
%LET
和%PUT
语句是SAS宏处理器的一部分,而不是基本SAS的一部分。 %
(和&
)触发器是激活宏处理器并允许它识别这些字符串在传递给SAS编译器/解释器之前需要处理的内容。
您不能使用
这样的赋值语句x = 3.5 ;
在数据步骤之外(或支持这些类型语句的某些proc)。
对于第二个问题,如果将宏语句包装在宏定义中,则主要影响将是。
NAME
尚不存在,则将其定义为宏的本地变量。%macro
语句开始定义宏。因此,直到相应%mend
语句的所有代码都定义了宏。要执行它,您需要使用%test
。答案 1 :(得分:1)
%let
和%put
是SAS宏语言的一部分。宏语言语句(带有一个或两个特殊的例外)以%
为前缀,告诉SAS宏解析器对它们进行操作。
它们与非%
版本完全不同 - 除非它的功能相同。您可以编写put "&mvar.";
- 只要它在数据步骤中(因为这是数据步骤语句)。开放代码中有时允许宏命令/函数/语句(而不是其他命令)。
在实际的宏中写它或多或少是一样的。但是存在范围问题; <{1}}将不会在该宏之外可用,除非它已被声明为全局。