0

我有以下带有错误的 SAS 程序。

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

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

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

有没有人知道这个的根本原因?

4

2 回答 2

1

试试这个:

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

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

您可能需要一个 let 语句或其他一些事情,或者您将执行 abs() 并且结果将“浮动”到内存中。

如果不看更多代码,很难说出你想用这个值做什么。

一篇关于 %sysfunc %SYSFUNC 的好 SUGI 论文:扩展 SAS 宏语言

于 2011-11-14T14:26:00.147 回答
1

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

尽管如此,试试这个:

proc sql ;
  select case when (abs(std(v)) <0.01) then 1 else 0 end into :sigmav_new from bb ;
quit ;
于 2011-11-16T09:35:11.883 回答