BookmarkSubscribeRSS Feed
moriokayutaka
Fluorite | Level 6

proc sql;
select median(age)
from sashelp.class
where age <= 10
;
quit;

moriokayutaka_0-1636614509276.png

本来,結果はNullのはずがゼロでかえってきます

proc sql _tree;
select median(age)
from sashelp.class
where age <= 10
;
quit;

と_treeオプションをつけて,正しくNullを返すmean関数と間違いを返すmedian関数で何が違うかをみてみると

moriokayutaka_1-1636614658690.png

17番であるmedianが呼び出されたときのみ 本来動くべき0obsのトラップが動かず
流れ込んだうえでFalseが帰ってきて,それが結果ゼロになってしまうのだろうと推理しました
median関数のみSAS9.4で追加された最後の関数なので,エラーハンドリングから漏れているのだと思うのですが,この件についてなにか知見のあるかたいればご教示いただきたいです

3 REPLIES 3
japelin
Rhodochrosite | Level 12

同じように動くはずのもの(ここでは関数)が、ものによって細かい内部動作が異なることはあるようです(私はformatで遭遇しました)が、
この場合は明らかに結果がおかしいのでバグのような気がします。
テクニカルサポートに連絡されてはいかがでしょうか。


ところで、proc sql _treeはundocumentedなんでしょうか。初めて聞きました。

moriokayutaka
Fluorite | Level 6

あ,どうもです.有難うございます!!
そうですよね,バグですよね.

テクニカルサポート…,昔何回かこの手の報告無視されて,ちょっと印象が悪くて(笑) 最近ここだとSASの人もよく見てるっぽかったので,つい.
え,ほんとですね..調べたらないですね…

当たり前のように昔から使ってましたが,なんで私知ってるんでしょう…
_treeの他に_methodもあるのですが,これもリファレンスにはないようですね

japelin
Rhodochrosite | Level 12

私の見間違えで、sql_tree じゃなく、sql _tree なんですね(投稿修正しました)。道理でググっても出てこないわけだ。

(何れにせよリファレンスにはありませんね。9.1で既にあったみたいですが)

 

テクサポへのバグ報告の際は明確な回答がない場合、米国本社への確認をお願いした方がいいと思います。(こんなことここで言っちゃっていいのかな)

バグかどうか、hotfixを出すかどうかの判断は全て米国本社マターのようですので。(回答に納得できるかどうかは別ですが:P