2011-11-14 49 views
0

我有以下SAS程序錯誤。在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是不是一個數字。

任何機構都知道這個根本原因?

+0

不會在宏變量名的拼寫錯誤不是嗎? sigmav_new與sigmac_new?不知道這是否只是在你的轉錄。 – sasfrog

回答

1

試試這個:

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

這將採取訴標準偏差,把它變成可能後又在sysfunc命令ABS()中使用的宏變量(數字)。

您可能需要一個let語句或其他事情正在進行,或者您將執行abs(),結果將「浮動」到內存中。

很難說出你想要做什麼而不看到你的代碼更多。

的%sysfunc %SYSFUNC: Extending the SAS Macro Language

1

首先談好SUGI紙你爲什麼否定對子級它傳遞給ABS之前的值()?

儘管如此,試試這個:

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