引用已定义的宏变量

时间:2017-07-03 10:08:54

标签: variables sas refer

我正在浏览SAS代码,并找到了以下引用宏变量的方法。

  1. & variable_name
  2. &安培; 变量名
  3. 我知道第一种引用方式是我们如何在sas中引用已定义的宏变量的正常方式。

    但是,请你解释第二种方式(宏变量名称之后没有句号)与第一种方式有何不同

2 个答案:

答案 0 :(得分:3)

当你引用一个宏变量时,&符号表示宏变量引用正在开始。宏处理器还需要确定宏变量引用的结束。

在大多数情况下,宏引用以空格或分号结束。

38   %let x=Hello;
39
40   %put &x;   *semicolon ends the reference;
Hello
41
42   %put &x World; *white space ends the reference;
Hello World

宏变量名称可以包含字母,数字和下划线。任何不能成为宏变量一部分的符号都将结束引用。例如问号:

44   %put &x?; *Question mark ends the reference;
Hello?

现在,假设您要生成字符串HelloWorld,Hello和World之间没有空格:

46   %put &xWorld;
WARNING: Apparent symbolic reference XWORLD not resolved.
&xWorld

那不起作用。宏处理器看到了一个名为xWorld的宏变量的引用,并且没有这样的宏变量。所以我们需要一种方法来告诉宏处理器宏变量引用在x之后结束。我们可以在x之后添加一个句点,说“宏变量引用在这里结束”。

47   %put &x.World;
HelloWorld

请注意,重要的是,我们输入的句点不会显示在写入日志的文本中。当宏处理器将其用作宏变量引用的结尾时,“处理”它的周期。

这意味着如果您希望在宏变量引用之后有一个句点,则必须键入两个句点。第一个被宏处理器吃掉。通常的例子是libref:

48   %let mylib=sashelp;
49
50   proc print data=&mylib.class;run;
ERROR: File WORK.SASHELPCLASS.DATA does not exist.

NOTE: The SAS System stopped processing this step because of errors.
51
52   proc print data=&mylib..class;run;

NOTE: There were 19 observations read from the data set SASHELP.CLASS.

有些人喜欢在宏变量引用之后总是使用句点作为编码风格。就个人而言,我只使用有必要指定宏变量引用结束的时间段。

答案 1 :(得分:1)

这是引用变量的简短方法。但是,在连接输出时会有所不同:

%let var = My name ;

%put &var.is Paul;
// Output: My name is Paul.

%put &varis Paul;
// Output: WARNING: Apparent symbolic reference VARIS not resolved.
// &varis Paul

另一个肯定需要.的例子:

%let lib = sashelp;
data temp;
  set &lib..class;
run;

我建议您始终使用变体&variable.。因为很清楚变量的结束位置。