我有以下带有错误的 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 不是数字。
有没有人知道这个的根本原因?
试试这个:
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 宏语言
首先,为什么要在将值传递给 abs() 之前否定一个值?
尽管如此,试试这个:
proc sql ;
select case when (abs(std(v)) <0.01) then 1 else 0 end into :sigmav_new from bb ;
quit ;