前のページ|次のページ

LINKステートメント

指定したステートメントラベルにプログラム実行移動します。RETURNステートメントが後に続く場合、LINKステートメントの直後のステートメントに実行を戻します。

該当要素: DATAステップ
カテゴリ: 制御
種類: 実行

構文

LINK label;

引数

label

LINKの移動先となるステートメントラベルを指定します。label引数は必ず指定する必要があります。

詳細

LINKステートメントは、LINKステートメントに指定したステートメントラベルにSASを移動します。移動先からRETURNステートメントまでの間にあるステートメントの実行を続けます。RETURNステートメントは、LINKステートメントの後に続くステートメントにプログラム制御を移動します。
LINKステートメントと移動先は同じDATAステップ内になければなりません。LINKステートメントでは、移動先はステートメントラベルで指定します。
LINKステートメントでは、別のLINKステートメントを含むステートメントグループに移動することができます。この配置方法はネストと呼ばれます。無限ループが発生しないように、ネストするLINKステートメントのデフォルト数がSASによって設定されています。RETURNステートメントを間にはさまずに、最大10個までのLINKステートメントをネストできます。複数のLINKステートメントが実行された場合、RETURNステートメントは最後に実行したLINKステートメントの次のステートメントにSASを戻します。ネストするLINKステートメントの数を増やすには、DATAステートメントで/STACKオプションを使用します。

比較

LINKステートメントとGO TOステートメントでは、後に続くRETURNステートメントのアクションが異なります。LINKステートメントの後にRETURNステートメントを指定すると、LINKステートメントの直後のステートメントに実行を戻します。GO TOステートメントの後にRETURNステートメントを指定し、GO TOステートメントの前にLINKステートメントがない場合は、DATAステップの先頭に実行を戻します。このとき、GO TOステートメントの前にLINKステートメントがある場合は、LINKステートメントの直後の最初のステートメントから実行を続けます。通常、LINKステートメントはRETURNステートメントを明示的に指定して使用しますが、GO TOステートメントはRETURNステートメントを指定せずに使用します。
同じプログラム内の複数のポイントでステートメントグループを実行する場合、LINKステートメントを使用するとコーディングが簡単になり、プログラムロジックも理解しやすくなります。プログラム内でステートメントグループを1つのポイントでのみ実行する場合、LINK-RETURNロジックよりもDOグループロジックを使用するほうが簡単です。

例: プログラム実行の移動

この例では、変数TYPEの値がaluvになる場合、LINKステートメントはラベルCALCUに割り当てたステートメントにプログラム実行を移動します。RETURNステートメントが検出されるまでこのプログラムが実行されます。RETURNステートメントが検出されると、プログラム実行はLINKの後に続く最初のステートメントに移動されます。割り当てステートメントを実行し、オブザベーションを書き込みます。その後、DATAステップの先頭に戻って、次のレコードを読み込みます。TYPEの値がaluvではない場合、割り当てステートメントを実行し、オブザベーションを書き込みます。その後、DATAステップの先頭に戻ります。
data hydro;
   input type $ depth station $;
      /* link to label calcu: */
   if type ='aluv' then link calcu; 
   date=today();
      /* return to top of step */
   return;                         
   calcu: if station='site_1' 
      then elevatn=6650-depth;
   else if station='site_2' 
      then elevatn=5500-depth;
         /* return to date=today(); */
   return;                           
   datalines;
aluv 523 site_1
uppa 234 site_2
aluv 666 site_2
...more data lines...
;

関連項目:

前のページ|次のページ|ページの先頭へ