前のページ|次のページ

SELECTステートメント

複数のステートメントまたはステートメントグループからその1つを実行します。

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

構文

END;

引数

(select-expression)

1つの値に評価される任意のSAS式を指定します。

参照項目 select-expressionを指定する場合のwhen-expressionの評価

(when-expression)

複合式などの任意のSAS式を指定します。SELECTでは、when-expressionを少なくとも1つ指定する必要があります。

ヒント 複数のwhen-expressionsをカンマで区切ることは、論理演算子ORで区切ることに相当します。
when-expressionの使われ方は、select-expressionを指定するかどうかによって異なります。
参照項目 select-expressionを指定しない場合のwhen-expressionの評価

statement

DOステートメント、SELECTステートメント、ヌルステートメントなどのSAS実行ステートメントを指定します。statement引数は必ず指定する必要があります。

詳細

SELECTグループ内のWHENステートメントの使用

SELECTステートメントは、SELECTグループを開始します。SELECTグループ内にWHENステートメントを置き、条件が真の場合に実行するSASステートメントを指定します。WHENステートメントをSELECTグループ内に少なくとも1つ使用する必要があります。オプションのOTHERWISEステートメントは、WHENの条件が偽の場合に実行するステートメントを指定します。ENDステートメントは、SELECTグループを終了します。
WHENステートメントにヌルステートメントを使用すると、真の場合に追加アクションを伴わない条件として認識されます。OTHERWISEステートメントにヌルステートメントを使用すると、WHENの条件がすべて偽の場合にエラーメッセージの表示を避けることができます。

select-expressionを指定する場合のwhen-expressionの評価

select-expressionを指定する場合、select-expressionwhen-expressionが評価されます。この2つの値が等しいかどうかを比較した後、真または偽の値を返します。比較結果が真ならば、statementを実行します。比較結果が偽ならば、現在のWHENステートメント内の次のwhen-expression に移動するか、他に式が指定されていない場合は次のWHENステートメントに移動します。WHENステートメントが他に存在せず、OTHERWISEステートメントが指定されている場合はOTHERWISEステートメントに移動します。SELECT-WHENの比較結果がすべて偽であり、OTHERWISEステートメントが指定されていない場合は、エラーメッセージを表示してDATAステップの実行を中止します。

select-expressionを指定しない場合のwhen-expressionの評価

select-expressionを指定しない場合、when-expressionが評価されて真または偽の結果が生成されます。結果が真ならば、statementを実行します。結果が偽ならば、現在のWHENステートメント内の次のwhen-expression に移動するか、他に式が指定されていない場合は次のWHENステートメントを実行します。また、OTHERWISEステートメントが指定されている場合は、OTHERWISEステートメントに移動します。(つまり、最初の真のWHENステートメントに示されたアクションを実行します。)when-expressionsの結果がすべて偽になり、OTHERWISEステートメントが指定されていない場合は、エラーメッセージを表示します。複数のWHENステートメントでwhen-expressionが真になる場合、最初のWHENステートメントが使用されます。いったんwhen-expressionが真になると、それ以降のwhen-expressionsは評価されません。

%INCLUDEファイルを使用した大量のデータの処理

大量のデータを処理する1つの方法として、DATAステップ内で%INCLUDEステートメントを使用します。%INCLUDEステートメントを使用すると、メインプログラムを管理しやすい状態に保ったまま複雑な処理を実行できます。メインプログラムで使用する%INCLUDEファイルは、データを処理するWHENステートメントとその他のSASステートメントから構成されます。 例については、大量のデータの処理を参照してください。

比較

ステートメントが少ないプログラムには、IF-THEN/ELSEステートメントを使用します。IF句に指定した条件が真になるオブザベーションやレコードのみに対して処理を継続するには、サブセット化IFステートメントをTHEN句を指定せずに使用します。
SELECTステートメントはSQLプロシジャのCASEステートメントのように動作します。

例1: ステートメントの使用

select (a);
   when (1) x=x*10;
   when (2);
   when (3,4,5) x=x*100;
   otherwise;
end;

例2: DOグループの使用

select (payclass);
   when ('monthly') amt=salary;
   when ('hourly')
      do;
         amt=hrlywage*min(hrs,40);
         if hrs>40 then put 'CHECK TIMECARD';
      end;         /* end of do     */
   otherwise put 'PROBLEM OBSERVATION';
end;               /* end of select */

例3: 複合式の使用

select;
   when (mon in ('JUN', 'JUL', 'AUG') 
   and temp>70) put 'SUMMER ' mon=;
   when (mon in ('MAR', 'APR', 'MAY')) 
   put 'SPRING ' mon=;
   otherwise put 'FALL OR WINTER ' mon=;
end;

例4: 等しいかを比較

   /* INCORRECT usage to select value of 2 */
select (x);
   /* evaluates T/F and compares for       */
   /* equality with x                      */
   when (x=2) put 'two';    
end;                        
   /* correct usage */
select(x);
   /* compares 2 to x for equality */
   when (2) put 'two';     
end;
   /* correct usage */
select;
   /* compares 2 to x for equality         */
   when (x=2) put 'two';    
end;

例5: 大量のデータの処理

次の例の%INCLUDEステートメントには、インベントリ内の新しい項目や古い項目を処理するWHENステートメントからなるコードが含まれます。メインプログラムには、DATAステップの全体的なロジックが示されます。
data test (keep=ItemNumber);
   set ItemList;
   select;
      %include NewItems;
      %include OldItems;
      otherwise put 'Item ' ItemNumber ' is not in the inventory.';
   end;
run;

関連項目:

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