前のページ|次のページ

BYSORT=データセットオプション

BYステートメントの検出時にSPD Engineで自動並べ替えを実行することを指定します。

該当要素: DATAステップおよびPROCステップ
デフォルト: YES
操作: BYNOEQUALS=データセットオプション
エンジン: SPD Engineのみ

構文

BYSORT=YES | NO

必須引数

YES

事前にデータを並べ替えるかわりに、BYステートメントを検出したときにBY変数に基づいて自動的にデータを並べ替えるように指定します。

NO

データをBY変数に基づいて並べ替えないように指定します。NOを指定する場合は、BYステートメントの前にすでにデータが並べ替えられている必要があります。インデックスは使用されません。

詳細

デフォルトBase SAS Engineを使用したDATAまたはPROCステップ処理では、インデックスがない場合やオブザベーションが順序どおりではない場合、BYステートメントが発行される前にデータセットを並べ替える必要があります。それに対して、SPD Engineでは、オブザベーションが順序どおりではない場合、デフォルトで、アプリケーションに返されるデータが並べ替えられます。並べ替えたデータセットが新規作成されるPROC SORTとは異なり、SPD Engineの自動並べ替えでは、永久データセットは変更されず、データセットは新規作成されません。ただし、ユーティリティファイル領域は使用されます。詳細については、SPDEUTILLOC=システムオプションを参照してください。
デフォルトはBYSORT=YESです。BYSORT=YES引数によって自動並べ替えが有効になり、オブザベーションはBYグループ順序で出力されます。データセットオプションBYNOEQUALS=YESの場合、グループ内のオブザベーションは、データセットでの順序とは異なる順序で出力される可能性があります。データセット順序を保持するにはBYNOEQUALS=NOを設定します。
BYSORT=NO引数の場合は、BYステートメントの前にすでにデータが並べ替えられている必要があります。並べ替えは、前のPROC SORTか、またはBY変数順序でのデータセットの作成によるものです。データセットが並べ替えられていない場合、エラーが発生します。BYSORT=NOの場合、グループ化されたデータはデータセット順序でアプリケーションに配信されます。インデックスは、BY変数順序のオブザベーションの取得には使用されません。BYSORT=NOの場合、データセットオプションBYNOEQUALS=は無効になります。
LIBNAMEステートメントでBYSORT=オプションを指定する場合、PROCステップまたはDATAステップでのBYSORT=の指定によって上書きされる可能性があります。入力モードで開くために、LIBNAMEステートメントのBYSORT=NOを上書きするには、DATAステップまたはPROCステップでBYSORT=YESを設定します。重要な点は、BYSORT=NOによって、エンジンがデータの並べ替え処理をしないように指示されることです。
MSGLEVEL=I SASシステムオプションを設定した場合、BYSORT=YESおよびIDXWHERE=データセットオプションを使用すると、次のメッセージがSASログに書き込まれます。
  • IDXWHERE=YESでBY変数にインデックスがある場合、テーブルの行の並べ替えにそのインデックスが使用されます。次のメッセージがSASログに書き込まれます。
    Note: BY ordering was produced by using an index for table tablename.
  • IDXWHERE=NOまたはIDXWHERE=YESで、BY変数にインデックスがない場合、SPD Engineで自動並べ替えが実行され、テーブルの行が並べ替えられます。次のメッセージがSASログに書き込まれます。
    Note: BY ordering was produced by performing an automatic sort on
          table tablename.

比較

BYSORT=データセットオプションで、BYSORT= LIBNAMEステートメントオプションが上書きされます。

例1: BYSORT=YESを使用するデフォルトのグループフォーマット

libname growth spde 'SAS-library';
data growth.teens;
   input Name $ Sex $ Age Height Weight;
datalines;
Alfred M 14 69.0 112.5
Carol F 14 62.8 102.5
James M 13 57.3 83.0
Janet F 15 62.5 112.5
Judy F 14 64.3 90.0
Philip M 16 72.0 150.0
William M 15 66.5 112.0
;
proc print data=growth.teens; by sex;
run;
BYSORT=YESがデフォルトのため、PROC SORTを使用してデータを並べ替えていなくても、エラーは発生しません。
出力は次のとおりです。
BYSORT=YESを使用するデフォルトのグループフォーマット
BYSORT=YESを使用するデフォルトのグループフォーマット

例2: BYSORT=NO

PROC PRINTステートメントにBYSORT=NOを指定すると、自動並べ替えが抑制されている場合(BYSORT=NO)、必ずエラーが返されます。BYステートメントの前にBY変数でデータを並べ替える必要があります(PROC SORTなどを使用)。
libname growth spde 'SAS-library';
proc print data=growth.teens (bysort=no);
by sex;
run;
ERROR: Data set GROWTH.TEENS is not sorted in ascending sequence.
       The current BY-group has Sex = M and the next BY-group has Sex = F.
NOTE: The SAS System stopped processing this step because of errors.
前のページ|次のページ|ページの先頭へ