前のページ|次のページ

関数とCALLルーチンの使用

関数の引数に影響する制限

引数の値が無効の場合、SASは引数が無効であることを示すメモまたはエラーメッセージをログに書き込み、結果を欠損値に設定します。関数の引数に関する一般的な制限は次のとおりです。
  • 関数の中には、一定の範囲内で引数を指定する必要があるものがあります。たとえば、LOG関数の引数は0より大きい必要があります。
  • 数値引数に欠損値があると、関数の多くはSASログにメモを書き込んで欠損値を返します。例外としては、一部の記述統計量関数と財務関数があります。
  • 関数の中には、EXP関数のように、受け入れる引数の範囲がプラットフォーム依存のものがあります。

一時配列でOF演算子を使用する

一時配列ではOF演算子を使用できます。OF演算子を使用すると、数が変化するパラメータを含む引数をとるほとんどの関数に一時配列を渡せます。一部の関数では、通常の変数配列でOFリストの一時配列を使用するのと同様に、一時配列のOFリストを使用できます。
一時配列の使用には、いくつかの制限があります。これらの制限は、例の後にリストで掲載しています。
一時配列の使用方法の例を次に示します。
data _null_;
   array y[10] _temporary_ (1,2,3,4,5,6,7,8,9,10);
   x = sum(of y{*});
   put x=;
run;

data _null_;
   array y[10] $10 _temporary_ ('1','2','3','4','5',
                                '6','7','8','9','10');
   x = max(of y{*});
   put x=;
run;
一時配列の使用例のログ出力
x=55 x=10
一時配列のOFリストは次の制限を受けます。
  • 配列インデックスとして使用できません。
  • 通常の変数配列と同様、パラメータ数がOFリストの要素数と一致する関数で使用できます。
  • 数が変化するパラメータをとることができる関数で使用できます。
  • DIF、LAG、SUBSTR、LENGTH、TRIM、MISSING関数では使用できません。また、VLENGTH関数などの変数情報関数では一切使用できません。

対象変数の特性

文字関数には、デフォルトの長さが200バイトの対象変数を結果として生成する関数があります。数値の対象変数はデフォルトの長さが8バイトです。デフォルトの対象変数の長さが適用されない文字関数を次の表に示します。これらの関数では、返される引数の長さが第1引数の長さから取得されます。
第1引数の長さによって返される引数が決まる関数
関数
COMPBL
RIGHT
COMPRESS
STRIP
DEQUOTE
SUBSTR
INPUTC
SUBSTRN
LEFT
TRANSLATE
LOWCASE
TRIM
PUTC
TRIMN
REVERSE
UPCASE
対象変数の長さが割り当てられていない場合の対象変数の長さを次の関数リストに示します。
BYTE
対象変数に割り当てられるデフォルトの長さは1です。
INPUT
入力形式の幅によって対象変数の長さが決まります。
PUT
形式の幅によって対象変数の長さが決まります。
VTYPE
対象変数に割り当てられるデフォルトの長さは1です。
VTYPEX
対象変数に割り当てられるデフォルトの長さは1です。

記述統計量関数の注

SASには記述統計量を返す関数が用意されています。これらの関数の多くはMEANSプロシジャとUNIVARIATEプロシジャによって生成される統計量に対応します。各統計量の計算手法はBase SASプロシジャガイドの初等統計量プロシジャのセクションで説明します。SASは引数の非欠損値の記述統計量を計算します。

財務関数の注

財務関数の種類

SASには財務計算を行う関数グループが用意されています。関数は次の種類に分類されます。
財務関数の種類
関数の種類
関数
説明
キャッシュフロー
CONVX、CONVXP
キャッシュフローのコンベクシティを計算します。
DUR、DURP
キャッシュフローの修正デュレーションを計算します。
PVP、YIELDP
定期キャッシュフローの現在価値と満期利回りを計算します。
パラメータ計算
COMPOUND
複利パラメータを計算します。
MORT
割賦返済パラメータを計算します。
内部利益率
INTRR、IRR
内部利益率を計算します。
正味現在価値および正味将来価値
NETPV、NPV
正味現在価値および正味将来価値を計算します。
SAVING
ある期間預金した場合の将来価値を計算します。
減価償却
DACCxx
指定した期間までの減価償却累積額を計算します。
DEPxxx
ある1期間の減価償却額を計算します。
価格
BLKSHCLPRC、BLKSHPTPRC
Black-Scholesモデルに基づき、株式のヨーロピアンオプションのコール価格とプット価格を計算します。
BLACKPLPRC、BLACKPTPRC
Black-Scholesモデルに基づき、先物のヨーロピアンオプションのコール価格とプット価格を計算します。
GARKHCLPRC、GARKHPTPRC
Garman-Kohlhagenモデルに基づき、株式のヨーロピアンオプションのコール価格とプット価格を計算します。
MARGRCLPRC、MARGRPTPRC
Margrabeモデルに基づき、株式のヨーロピアンオプションのコール価格とプット価格を計算します。

価格関数の使用

ある金融商品の理論的な市場価額(価格)を計算するのに使うのが価格モデルです。この計算された価額を時価評価(MTM)額と呼びます。通常、価格関数は次の形式をとります。
価格関数のrf1rf2およびrf3は、利率や外国為替レートなどのリスクファクタです。MTM額の計算に使用するリスクファクタの具体的な値がベースケース値です。ベースケース値のセットがベースケースの市場状態です。
MTM額が決まったら、リスクファクタのベースケース値(rf1rf2およびrf3)を使って次のタスクを実行できます。
  • ベースケース値を特定の値に設定してシナリオ分析を実行
  • ベースケース値をさまざまな値に設定して利益/損失曲線分析および利益/損失表面分析を実行
  • ベースケース値を他の値に自動設定し、感度を計算(リスクファクタのデルタ値およびガンマ値を計算)
  • ベースケース値を攪乱させ、起こりうる市場状態を多数作り出して、ありうる将来の価格を多数計算し、シミュレーション分析を実行。モンテカルロ分析については、数式モデルおよびコピュラ法を使ってリスクファクタの値を計算
価格関数とその説明の一覧については、財務関数の種類を参照してください。

マクロ関数内でDATAステップ関数を使用する

マクロ関数%SYSFUNCおよび%QSYSFUNCはDATAステップ関数のほとんどを呼び出し、マクロ機能でテキストを生成できます。%%SYSFUNCと%QSYSFUNCには、次の違いがあります。QSYSFUNCは特殊文字とニーモニックをマスクしますが、%SYSFUNCはマスクしません。%QSYSFUNC関数と%SYSFUNC関数の詳細については、SASマクロ言語: リファレンスを参照してください。
%SYSFUNCの引数は、次の例に示すように、1つのDATAステップ関数と任意指定の形式です。
%sysfunc(date(),worddate.)
%sysfunc(attrn(&dsid,NOBS))
DATAステップ関数は%SYSFUNC内でネストできません。ただし、DATAステップ関数を呼び出す%SYSFUNC関数はネストできます。次に例を示します。
%sysfunc(compress(%sysfunc(getoption(sasautos)),
   %str(%)%(%')));
%SYSFUNC関数の内部にあるDATAステップ関数の引数はすべてカンマで区切る必要があります。OFを先頭とする引数リストは使用できません。
%SYSFUNC関数はマクロ関数であるため、DATAステップ関数の場合とは異なり、文字値を引用符で囲む必要はありません。たとえば、OPEN関数を単独で使用するときは引数を引用符で囲みますが、%SYSFUNC内で使用するときは引用符を必要としません。
dsid=open("sasuser.houses","i");
dsid=open("&mydata","&mode");
%let dsid=%sysfunc(open(sasuser.houses,i));
%let dsid=%sysfunc(open(&mydata,&mode));

CALLルーチンと%SYSCALLマクロステートメントを使用する

%SYSCALLマクロステートメントがCALLルーチンを起動するとき、引数であるマクロ変数の値はそれぞれ解決されずに取得されて、CALLルーチンに渡されます。CALLルーチンの完了時に、各引数の値が、それぞれ対応するマクロ変数に書き戻されます。SYSCALLでエラーが発生すると、CALLルーチンはマクロ変数の値を更新せずに実行を停止し、エラーメッセージをログに書き込みます。
%SYSCALLがCALLルーチンを起動するとき、引数の値は解決されずにCALLルーチンに渡されます。未解決の引数の値はマクロ引用関数で引用されている可能性があり、デルタ文字を含んでいる可能性があります。引用形式の引数の値は、文字値の比較時に予測できない結果を招く可能性があります。CALLルーチンの一部は、%SYSCALLからの呼び出し時に引数の引用を解除し、引用が解除された値を返します。引数の引用を解除する必要がないCALLルーチンもあります。%SYSCALLからの呼び出し時に引数の引用を解除するCALLルーチンのリストを次に示します。
これに対し、%SYSCALLはCALLルーチンを起動し、デルタ文字を含む未解決の値を返します。%SYSFUNCは関数を起動し、デルタ文字を含まない解決済みの値を返します。詳細については、マクロクォーティング (SASマクロ言語: リファレンス) %SYSCALLステートメント (SASマクロ言語: リファレンス)および %SYSFUNC関数と%QSYSFUNC関数 (SASマクロ言語: リファレンス)を参照してください。

関数を使用したファイルの操作

SASでは、関数やステートメントのいずれを使用するかによってファイルの操作方法が異なります。FOPEN、FGETおよびFCLOSEなどの関数を使えば、INFILE、INPUTおよびPUTなどのステートメントを使うよりもデータを検証、操作する自由度が高くなります。
外部ファイルを使うとき、FOPEN関数はファイルデータバッファ(FDB)と呼ばれるバッファを割り当て、外部ファイルを開いて読み込みや更新を行います。FREAD関数は外部ファイルからレコードを読み込み、データをFDBにコピーします。続いて、FGET関数がデータをDATAステップ変数に移動します。DATAステップ内のステートメントや他の関数でこの関数が返す値を確認し、データを引き続き処理する方法を決定します。レコードの処理後、FWRITE関数がFDBの内容を外部ファイルに書き込むと、FCLOSE関数はファイルを閉じます。
SASデータセットを使うときは、OPEN関数でデータセットを開きます。FETCH関数とFETCHOBS関数は開いているSASデータセットからオブザベーションをDDV(データセットデータデータベクトル)内に読み込みます。続いて、GETVARC関数とGETVARN関数がデータをDATAステップ変数に移動します。DATAステップ内のステートメントや他の関数でこれらの関数が返す値を確認し、データを引き続き処理する方法を決定します。データの処理後、CLOSE関数でそのデータセットを閉じます。
関数とCALLルーチンの完全なリストについては、カテゴリ別のSAS関数とCALLルーチンを参照してください。詳細と例については、本書のディクショナリセクションを参照してください。
前のページ|次のページ|ページの先頭へ