在SAS宏中调用函数

时间:2011-11-14 03:20:15

标签: sas sas-macro

我有以下带有错误的SAS prorgram。

proc sql
create table sigmav_n as 
select std(V) as sigmav_new from bb
quit
...
sysfunc(abs(-sigmac_new))<0.01

这里V是表bb中的列名。程序抛出错误如下,

  

参数I用于由%SYSFUNC或%QSYSFUNC宏引用的ABS功能   功能不是数字。

任何人都知道这个的根本原因吗?

2 个答案:

答案 0 :(得分:1)

试试这个:

proc sql
select std(V) into :sigmav_new from bb
quit
...
%sysfunc(abs(-&sigmav_new.))<0.01

这将取v的std dev,将其放入一个宏变量(数字),然后可以在sysfunc命令中由abs()使用。

你可能需要一个let语句或其他东西,或者你要执行abs(),结果只会'浮出'到内存中。

如果没有看到更多的代码,很难说出你想要对这个值做些什么。

关于%sysfunc %SYSFUNC: Extending the SAS Macro Language

的一篇很好的SUGI论文

答案 1 :(得分:1)

首先,为什么要在将值传递给abs()之前否定一个值?

尽管如此,试试这个:

proc sql ;
  select case when (abs(std(v)) <0.01) then 1 else 0 end into :sigmav_new from bb ;
quit ;