|
|
サブセット化IFステートメントとWHEREステートメントの違い
[OS]ALL
[リリース] 6.07以降
[キーワード] base, datastep, where, if, statement, usage, subset, data
[質問]
サブセット化IFステートメントとWHEREステートメントは非常によく似ています。
どう使い分ければよいか教えてください。
[回答]
サブセット化IFステートメントとWHEREステートメントは、どちらも条件にもとづいてオブザベーションを選択するのに使えます。また構文もよく似ています。
しかしこれらのステートメントは、次の点で異なっています。
- オブザベーション選択のタイミング
- 記述できる条件式
- 使用できるステップ
- ●オブザベーション選択のタイミング
- SAS System 6のSASでは、エンジンと呼ばれる入出力用プログラムがSASデータセットのアクセスに使われます。
オブザベーションを読み込む場合、まずエンジンがSASデータセットから読み込み、そのオブザベーションがDATAステップ等に引き渡されます。
WHEREステートメントはエンジンでの読み込みの際に作用します。一方サブセット化IFステートメントはDATAステップでの処理の際に作用します。
この違いにより、実際に次のような相違点が生じます。
- 外部ファイルからの読み込みにはエンジンは使われません。このためWHEREステートメントは、INFILE-INPUTで読み込む外部ファイルには使用できません。
- グループ処理を行うときに使用するFIRST.byおよびLAST.by変数の値の挙動が、WHEREステートメントとサブセット化IFステートメントでは異なることがあります。
- ●記述できる条件式
- サブセット化IFステートメントでは、SAS演算式のルールにもとづく任意の条件式が使えます。
一方WHEREステートメントはエンジンでの処理時に作用するため、条件式にDATAステップ関数は使えません。
しかしWHEREステートメント特有の便利な各種演算子(CONTAINS、BETWEEN-AND、LIKEなど)が使えます。
- ●使用できるステップ
- サブセット化IFステートメントはDATAステップでしか使えません。
一方WHEREステートメントはエンジンでの処理時に作用するため、DATAステップだけでなくPROCステップでも使えます。
SASデータセットの一部に対してプロシジャで処理する場合、SAS System 5では、まずDATAステップでサブセットのデータセットを作成し、
次にプロシジャを実行する必要がありました。
SAS System 6では、PROCステップでWHEREステートメントが使えるので、1つのPROCステップで簡単にデータのサブセットを処理できます。
これは、CPU時間およびディスク容量の節約になります。
|