SAS宏变量变化

时间:2011-03-25 08:51:50

标签: sas sas-macro

一般来说,我们如何处理需要在宏内部修改宏变量的情况;例如,假设我有这个宏:

%macro test (arg=); 
array arrayone [&arg];   /* This is ok */
array arraytwo [&arg+1] /* This is not ok. How to make it work? */ 
... 

当我想要%test(3)然后我想要的时候,我们如何管理这些情况 arraytwo需要采取维度4 ...?

2 个答案:

答案 0 :(得分:5)

将其更改为

array arraytwo[%EVAL(&ARG + 1)] ;

答案 1 :(得分:3)

只要您只需要整数运算,使用%eval就足够了。如果需要使用宏变量执行浮点运算,则应使用%sysevalf。

大多数数据步骤函数可以通过以下两种方法之一直接应用于宏变量:

 1. %function()
 2. %sysfunc(function())

对于许多最常用的函数,有精确的宏等价物,您所要做的就是在函数名前添加一个%。通常可以通过在%sysfunc()中调用它们来接受宏变量来接受宏变量。 N.B。数据步骤函数通常期望包含在单引号中的字符串在通过%sysfunc()在一段宏代码中调用时将失败,除非您删除引号。 E.g。

data _null_;
  x = rand('uniform');
run;

在数据步骤中工作正常,但要在一段宏代码中为宏变量赋予相同的值,则需要使用

%let x = %sysfunc(rand(uniform));

这是因为在宏环境中,SAS将文本 uniform 解释为字符串,而在数据步骤中,SAS会将​​未加引号的文本解释为变量的名称。

相关问题