Sas 声明宏变量并将函数的求值作为值

Sas 声明宏变量并将函数的求值作为值,sas,Sas,我是SAS的新手。当我试图将某个操作的结果声明为值的宏变量时,遇到了一个问题 数据\u空\u; %设var1=12345; %设var2=substr(&var1,4,5); 运行 我得到var2有值substr(&var1,4,5)(一个字符串),而不是我想要的45。如何使变量声明对函数求值 对不起,这个问题很琐碎。我查阅了一下文档,但没有找到答案 有一个名为%substr()的宏等价物,可按如下方式使用: %let var1 = 12345; %let var2 = %substr(&

我是SAS的新手。当我试图将某个操作的结果声明为值的宏变量时,遇到了一个问题

数据\u空\u;
%设var1=12345;
%设var2=substr(&var1,4,5);
运行

我得到
var2
有值
substr(&var1,4,5)
(一个字符串),而不是我想要的
45
。如何使变量声明对函数求值


对不起,这个问题很琐碎。我查阅了一下文档,但没有找到答案

有一个名为
%substr()
的宏等价物,可按如下方式使用:

%let var1 = 12345;
%let var2 = %substr(&var1., 4,2);

%put var2 = &var2;
请注意,宏语言处理不需要
data
run
语句,
%substr()
(和
substr()
)的第三个参数指定所需的长度,而不是最后一个字符的位置,这就是为什么我使用
2
而不是
5


编辑:此外,如果没有等效的宏,则可以使用
%sysfunc()
在宏代码中使用数据步函数。有关完整的详细信息,请参阅,因为存在一些怪癖,例如不使用引号和可使用的数据步函数列表中的一些例外情况。

仅供参考-如果您想使用函数(非宏等效项),可以使用
%sysfunc()
封装函数和参数。例如-
%sysfunc(substr(&var1,4,5))
的工作方式与
%substr(&var1,4,2)
相同。