たまにEXCELでの○○関数と同じ働きのSAS関数ないかなぁ、まあ思いつかないし、マクロ(またはFCMPプロシジャで作成するユーザー定義関数)にするか~、見たいな時ってありますよね。
実はSASの中にいくつかのEXCEL関数が用意されているのですが、そのままでは使えません。
まず
「ソリューション」→「データ解析」→「FCmp Function Editor」を起動します
FCmp Function Editorの説明については、またいずれ。要はSASは9.2からFCMPプロシジャというもので、ユーザーが自作の関数や、コールルーチンを作成することができ、それをライブラリにいれて、参照すれば、誰でも使えるよっていう機能があって
FCmp Function Editorはそれを手で直接編集・管理できるようなアプリです。
で起動したら、左側にライブラリがいくつか表示されていると思います。
もし、ライブラリの中にユーザー定義関数が作成されていれば、ここから参照できます。
で、作ってないのに、なんかSASHELPの下に表示されているはずなので、それを展開してみます。
すると関数のリストみたいなものがずらずらあって、詳細のところを
みると「EXCEL PRODUCT」(↑上の図でハイライトされている部分)とか書いています。
これは今ハイライトされている「product_slk」というものはEXCELのPRODUCT関数と同じ働きをするものですよという意味です。
ダブルクリックしてみると
右側にその関数を生成した、FCMPプロシジャのコードがそのまま入っています。
機能や使い方も全部書かれているので、FCMPプロシジャの勉強する上でも大変役立ちます。
ちなみにこれらは読み取り専用です。
すでに、作成されてSASHELPライブラリの中に入っているとのことなので
早速使ってみましょう!
でも、その前にEXCELのPRODUCT関数を知らないと、感動半減なのでその説明を
のように、ようは引数全部を掛け算した値を返す関数です。
さて、じゃあ使ってみましょう。
options cmplib = sashelp.slkwxl;
data X;
ARRAY NU{3} _TEMPORARY_ (2 3 4);
X=product_slk(NU);
run;
proc print;
run;
すると
となって、おぉ同じだ!となるわけです。
ちなみにユーザー定義関数は
options cmplib でユーザー定義関数の塊(正式名しりません)が入っているライブラリと、塊の名前を指定しないと使えません。
塊の名前は生成コードのoutlib=のライブラリ名の後に続いている名前です。
それさえ終われば後は普通の関数と同じように使えます。
FCMPの詳しい説明はまたいずれ