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

まず、値を 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 に答える
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 に関する優れた SUGI 論文: SAS マクロ言語の拡張

于 2011-11-14T14:26:00.147 に答える