前のページ|次のページ

IFステートメント、サブセット化

指定した式の条件に一致するオブザベーションの処理を継続します。

該当要素: DATAステップ
カテゴリ: アクション
種類: 実行

構文

引数

expression

SAS式を指定します。

詳細

基本

サブセット化IFステートメントにより、DATAステップにおいて、このIFステートメントに指定した式の条件を満たすSASデータセットの生データレコードやオブザベーションのみ処理が継続されます。式がオブザベーションやレコードに対して真として評価される場合(値がゼロでも欠損値でもない場合)、DATAステップ内のステートメントが実行され、現在のオブザベーションがデータセットに挿入されます。実行後に生成されるSASデータセットには、オリジナルの外部ファイルまたはSASデータセットのサブセットが含まれます。
式が偽として評価される場合(値が0または欠損値である場合)、それ以降のステートメントはオブザベーションやレコードに対して実行されません。現在のオブザベーションはデータセットに書き込まれず、DATAステップの残りのプログラムステートメントは実行されません。サブセット化IFステートメントでは、オブザベーションの処理を中止するために他のステートメントを実行する必要がないため、すぐにDATAステップの先頭に戻ります。

CONTAINS演算子やLIKE演算子に相当する演算子をIFステートメントで使用する

WHERE句内のLIKE演算子は、複数のワードからなるパターンと一致します。IFステートメントで同じ結果を得るには、'=:'演算子を使用します。この演算子は、文字列の先頭から始まるパターンと一致します。たとえば次のように記述します。
data test;
   input name $;
   datalines;
John
Diana
Diane
Sally
Doug
David
;
 run;

data test;
   set test;
   if name =: 'D';
run;

proc print;
run;
WHERE句内のCONTAINS演算子は、値の内部に指定の文字列が含まれているかどうかをチェックします。IFステートメントで同じ結果を得るには、INDEX関数を使用します。たとえば次のように記述します。
data test;
   set test;
   if index(name,'ian') ge 1;
run;

proc print;
run;

比較

  • サブセット化IFステートメントは、次のIF-THENステートメントと同じです。
    if not (expression)
       then delete;
  • SASデータセットの作成時、オブザベーションを含める条件を指定するほうが簡単な場合はサブセット化IFステートメントを使用します。オブザベーションを除外する条件を指定するほうが簡単な場合はDELETEステートメントを使用します。
  • サブセット化IFステートメントとWHEREステートメントは同じではありません。この2つのステートメントでは、動作や生成される出力データセットが異なる場合があります。重要な違いは次の点になります。
    • サブセット化IFステートメントでは、プログラムデータベクトルに読み込まれたオブザベーションを選択します。WHEREステートメントでは、プログラムデータベクトルに読み込まれる前にオブザベーションを選択します。サブセット化IFステートメントでは、入力データセットの各オブザベーションをプログラムデータベクトルに読み込む必要があるため、WHEREステートメントと比較すると効率的ではない場合があります。
    • SASデータセットのインタリーブ、マージ、更新を実行するDATAステップでは、サブセット化IFステートメントとWHEREステートメントの結果が異なる場合があります。
    • サブセット化IFステートメントとMERGEステートメントを同時に使用する場合、現在のオブザベーションを結合した後にオブザベーションを選択します。WHEREステートメントとMERGEステートメントを同時に使用する場合、現在のオブザベーションを結合する前に各データセットに選択基準を適用します。
    • サブセット化IFステートメントでは、既存のSASデータセットや、INPUTステートメントを使用して読み込んだ生データからオブザベーションを選択できます。WHEREステートメントでは、既存のSASデータセットからのみオブザベーションを選択できます。
    • サブセット化IFステートメントは実行ステートメントですが、WHEREステートメントは実行ステートメントではありません。

例: オブザベーションの限定

  • この例では、変数SEXの値がFのオブザベーションのみがデータセットに含まれます。
    if sex='F';
  • この例では、変数AGEの値が欠損値でも0でもないすべてのオブザベーションがデータセットに含まれます。
    if age;

関連項目:

XisError: No pubcode in link data found for lrcon
データセットオプション:
XisError: No pubcode in link data found for ledsoptsref
前のページ|次のページ|ページの先頭へ