我有以下带有错误的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功能 功能不是数字。
任何人都知道这个的根本原因吗?
答案 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 ;