この関数について、すこし紹介(こちら)したことがありますが、
色々調べて注意点をまとめました。
- まずMONOTONIC関数はSASのリファレンスに載っていない、いわゆる「Undocumented SAS function」
- データステップで使う分にはあまり問題となる事はないですが、SQLプロシジャで使用する際は要注意
どういう事かというと、、
データステップだとレコードが並んでる順にデータ処理が行われるけど、
SQLプロシジャだと再マージやGROUP処理など複雑な処理では、レコードが並んでいる順に処理を行っているわけでは無さそう(内部的な話なので、どのような順で処理を行うのかも分からない) - MONOTONIC関数は処理順に連番をふるので、SQLプロシジャで使用すると上記で説明したとおり、意図したものと違う、おかしな順番で番号がふられてしまいます。
MONOTONIC関数の結果値を見ることでSQLプロシジャでの内部処理順を探るヒントになりそうで、それはそれで面白いけど、注意点としておさえておく必要があります。
SASYAMAさんの記事で更なる注意点が見つかりました。
monotonic関数でアイタタタ(データステップ100万回)
こんにちわ!
返信削除そうですか、びっくりです。難しいですね、、。
SQLで、面白いことするために生まれた関数だと思ったのに。。
僕のブログのmonotonicの記事のところに、注意書きとして追記で、こちらの記事にリンクさせていただきました。
こんにちは。
削除そうなんですよー、色々面白いことできそうなんですが。
連番をふる関数ってoracleとかにもあると思うんですが、同じ問題を抱えてるんでしょうかね。
内部処理がどうなってるのかSQLプロシジャ作った人に聞いてみたいです。