ユーザー定義メソッドとは、自分で関数を作れるみたいなやつと思ってください。
構文
method メソッド名 ( 引数の定義1 , 引数の定義2 ・・・ ) returns 戻り値の型 ;
return 戻り値 ; end; |
いきなり構文みてもよく分かんないので、まずは簡単な例から。
簡単な例
proc ds2;
data _NULL_ ; method TEST( double VAR1 ) returns double; return VAR1+10; end; method init(); dcl double OUTVAR; OUTVAR = TEST(100); put '******' OUTVAR '******'; end; enddata; run; quit; ログ ****** 110 ****** |
解説
TESTというメソッドを作って、これに数値を放り込むと、10足した値を返してくれる仕組みを作ってます。
まずは仕組み作り
method TEST( double VAR1 ) returns double;
return VAR1+10; end; |
① 「method TEST」で TEST というメソッドを作ります。
メソッドに放り込まれてくる数値を 「( double VAR1 )」 でdouble型の変数VAR1が受け取れるようにします。
「returns double」でメソッドの結果をdouble型で返すよう指定。
② 「return VAR1+10」で、VAR1に10足した値をメソッドの結果として返しています。
メソッドに放り込まれてくる数値を 「( double VAR1 )」 でdouble型の変数VAR1が受け取れるようにします。
「returns double」でメソッドの結果をdouble型で返すよう指定。
② 「return VAR1+10」で、VAR1に10足した値をメソッドの結果として返しています。
これで仕組み作り完了!今度はこのメソッドを使ってみます。
method init();
dcl double OUTVAR; OUTVAR = TEST(100); put '******' OUTVAR '******'; end; |
メソッドの使い方は普段使ってる関数と同じです。
「OUTVAR = TEST(100)」でTESTメソッドに「100」を渡し、返された値を変数OUTVARに入れています。
以下はBMIを計算するメソッドを作っています。
proc ds2;
data DT1 (overwrite=yes); dcl double VAR1; method BMI( double CM , double KG) returns double; * CM :身長(cm) , KG :体重(kg) ; dcl double BMI; BMI = round( KG / ((CM/100)**2) ,.1); return BMI; end; method init(); VAR1 = BMI(156,60); put VAR1; end; enddata; run; quit; DT1
|
実践例とは言いつつも、あんまりメソッドにする意味のない例かな、、
注意事項
メソッドの引数を CHAR, VARCHAR, NVARCHAR などの文字変数にする場合、必ずlengthも設定しましょう。
× method TEST( char X ) ・・・;
○ method TEST( char(20) X ) ・・・;
何故かというと、
引数が文字変数でlengthが設定されていないと自動で「length=8」に設定されます。
なので、メソッドを実行するときに、引数に8バイト以上の文字を指定しても、8バイトで切っちゃいます。DS2プロシジャ入門記事
1: 基本構文
2: 変数の宣言
3: 変数属性と配列の定義
4: データ型①
0 件のコメント:
コメントを投稿