ラベル FCMP の投稿を表示しています。 すべての投稿を表示
ラベル FCMP の投稿を表示しています。 すべての投稿を表示

EXCEL関数をSASの中で使いたい時、運がよければSASHELPにデフォルトでユーザー定義関数として用意されている可能性があるので使わない手はないという話

たまに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の詳しい説明はまたいずれ