僕の頁 <SASと臨床試験と雑談と>

徒然なるままにSAS暮らし

----

スポンサーサイト  

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Posted on --/--/-- --. --:-- [edit]

CM: --
TB: --

0209

FCMPプロシジャ事始め  

SASで9.2からようやく使用できるようになった関数作成機能である
FCMPプロシジャの基本的な使用方法をメモしておきます。全然複雑
ではないのですが、使うときにいつもおまじないとかを忘れてしまい
ますので・・・。

outlibで関数を格納するデータセットとパッケージ名を指定して、
functionまたはsubroutineステートメントで関数を定義します。
functionの場合はreturn、subroutineの場合はoutargsで
戻り値を指定します。
proc fcmp outlib=libname.dataset.package ;
function name(変数1, 変数2, …) ;
SAS code ;
return 変数X ;
endsub ;
subroutine name(変数1, 変数2, …, 変数X) ;
outargs 変数X ;
SAS code ;
endsub ;
run ;

関数を呼び出して使用する際は、optionsステートメントのcmplib
で関数を格納しているデータセットを指定します。
options cmplib=libname.dataset ;

DATAステップでは、functionはそのまま名前を指定して実行できますが、
subroutineはcall関数として呼び出すことになります。
VAL = function_name(変数1, 変数2, …) ; *--- 関数の呼び出し ;
X = . ; call function_name(変数1, 変数2, …, X) ; *--- サブルーチンの呼び出し ;

簡単な例を紹介します。MPG⇒KPL、lb⇒kgの変換とPWCの計算を行います。
・1 mile per gallon (MPG) = 0.425143707 kilometers per liter (KPL)
・1 kg = 0.45359 lb
・Power Weight Ratio = Weight (kg)/Horsepower (ps)

*** 関数の定義 ;
proc fcmp outlib=WORK.FUNCDT.CARCALC ; *--- WORKライブラリに格納 ;
function MPG2KPL(_MPG) ;
_KPL = 0.425143707*_MPG ; *--- km/Lに変換 ;
return(_KPL) ;
endsub ;
function LB2KG(_LB) ;
_KG = 0.45359*_LB ; *--- kgに変換 ;
return(_KG) ;
endsub ;
subroutine PWRCALC(_KG, _PS, _PWR) ;
outargs _PWR ;
_PWR = _KG/_PS ; *--- PWR計算 ;
endsub ;
run ;
*** 関数の実行 ;
options cmplib=WORK.FUNCDT ; *--- 関数呼び出しのおまじない ;
data _CARS ;
set SASHELP.CARS ;
KPL_CITY = MPG2KPL(MPG_CITY) ; *--- km/Lに変換 ;
WGT_KG = LB2KG(WEIGHT) ; *--- kgに変換 ;
PWR=. ;
call PWRCALC(WGT_KG, HORSEPOWER, PWR) ; *--- PWR計算 ;
format KPL_CITY PWR 8.1 WGT_KG 8. ;
run ;
proc print data=_CARS(obs=10) label noobs ;
var Make Model KPL_CITY WGT_KG PWR ;
run ;

結果は以下になります。
・FUNCDTデータセット(関数の情報)
関数格納データセット
関数格納データセット2

・実行結果
関数実行結果
再帰処理等、DATAステップやマクロでは実行が難しいロジックも
FCMPプロシジャであれば可能である場合もあるかと思いますので、
良いものがあればまた紹介したいです。
スポンサーサイト

Posted on 2014/02/09 Sun. 11:50 [edit]

CM: 0
TB: 0

プロフィール

最新記事

最新コメント

最新トラックバック

月別アーカイブ

カテゴリ

訪れた人

▲Page top

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。