前のページ|次のページ

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

変数アラインメントを指定します。

該当要素: DATAステップおよびPROCステップ
デフォルト: YES
制限事項: SPD Serverでのみ使用
エンジン: SPD Engineのみ

構文

ALIGN=YES | NO

必須引数

YES

変数アラインメントを有効化します。

NO

変数アラインメントを無効化し、SPD EngineデータセットがSPD Serverと互換性を持つようにします。

詳細

変数アラインメント

Base SASは、オブザベーション内の変数を注意深く配列することにより、ディスク上のオブザベーションにおいて適切な数値データアラインメントを提供します。デフォルトBase Sas Engineと同様に、SPD Engineは、すべての数値がオブザベーションの先頭にまとめられることを保証します。また、Base SAS Engineは、必要に応じてオブザベーションの末尾に余分なパディングバイトを追加することにより、オブザベーション全体の長さが8バイトの偶数倍になることを保証します。SASメモリシステムは、すべての割り当てられたメモリが8バイト境界で開始されること、およびすべての数値が8バイト長になることを保証します。数値をオブザベーションの先頭にまとめることにより、それらの数値が適切にアラインメントされ、同数値がメモリから直接使用可能となることが保証されます。
SPD Engineデータセット内のオブザベーションは、ディスクからメモリに読み取られます。すべてのバイトが一度に読み取られるため、それらの相対的なアラインメントはメモリ内で維持されます。オブザベーションのデータへのアクセス時に最大のパフォーマンスを発揮するには、すべての数値データが適切にアラインメントされる必要があります。このため、値を新しい場所に移動する必要性が回避されます。SPD Engineの通常の動作は、ディスクへの書き出し時に、オブザベーション内のすべての数値が8バイト境界でアラインメントされることを保証します。これにより、SPD Engineはオブザベーションデータをディスクから取り出し、同データをメモリに格納できます。SPD Engineアプリケーションは、データを移動する必要なしに 、指定の格納場所からオブザベーションデータを直接使用します。

SPD Serverの使用

SPD Serverはデータアラインメント機能をサポートしません。SPD Engineにより作成され、 SPD Serverデータセットにより使用されるデータセットは、データアラインメントを無効にして作成する必要があります。ALIGN=NOオプションを指定すると、データセット内に格納されるデータはアラインメントされません。この場合、データをそれが読み取られた元々のメモリ上の場所から、アラインメント先となる異なるメモリ上の場所へと移動する必要があります。
ALIGN=NOデータセットオプションは、SPD Engineによりデータアラインメントが行われないことを指定します。このオプションはまれにしか使用されませんが、SPD Serverを使用する場合には必要となります。SPD Serverは変数アラインメント機能をサポートしません。状況によっては、SPD Serverは、アラインメントされた変数を含むデータセットに関する操作を拒否する場合もあります。
注意:
データセットの宛先がSPD Serverである場合を除き、ALIGN=NOオプションは使用しないでください。
変数データがアラインメントされていない場合、Base SASによって処理される際にパフォーマンスが大幅に低下します。

例1: 変数アラインメントが有効であるデータセット

最初のデータセットは、アラインメントされた変数を含んでおり、デフォルトの動作を示します。オブザベーション長が変数長の合計と等しくならないことに注意してください。オブザベーション長は、8の倍数に切り上げられています。また、変数は、数値変数がオブザベーションの先頭に来るように並べ替えられています。
変数アラインメントが有効であるデータセット
data testdata.size; length text $10 width 8 chars 8; text='Zero'; width=1; chars=4; output; text='Ten'; width=2; chars=3; output; text='Twenty'; width=2; chars=6; output; run; NOTE:The data set TESTDATA.SIZE has 3 observations and 3 variables. proc sql; select obslen from dictionary.tables where memname="SIZE"; Observation Length ----------- 32 select varnum, name, npos, length from dictionary.columns where memname="SIZE" order by npos; Column Number Column Column in Table Column Name Position Length -------------------------------------------------------------- 2 width 0 8 3 chars 8 8 1 text 16 10 quit; /* ------------------------------------------------------------------- */ data testdata.size (align=no); length text $10 width 8 chars 8; text='Zero'; width=1; chars=4; output; text='Ten'; width=2; chars=3; output; text='Twenty'; width=2; chars=6; output; run; NOTE:The data set TESTDATA.SIZE has 3 observations and 3 variables.

例2: 変数アラインメントが無効であるデータセット

2番目のデータセットは、変数がアラインメントされていないことを除き、最初のデータセットと同じものです。オブザベーション長が変数長の合計と等しくなることに注意してください。オブザベーション長は、8の倍数に切り上げられません。変数は、DATAステップのLENGTHステートメントに記述されている順番に並べられます。変数は、アラインメント用には並べ替えられていません。
変数アラインメントが無効であるデータセット
data testdata.size (align=no); length text $10 width 8 chars 8; text='Zero'; width=1; chars=4; output; text='Ten'; width=2; chars=3; output; text='Twenty'; width=2; chars=6; output; run; NOTE:The data set TESTDATA.SIZE has 3 observations and 3 variables. proc sql; select obslen from dictionary.tables where memname="SIZE"; Observation Length ----------- 26 select varnum, name, npos, length from dictionary.columns where memname="SIZE" order by npos; Column Number Column Column in Table Column Name Position Length -------------------------------------------------------------- 1 text 0 10 2 width 10 8 3 chars 18 8 quit; NOTE:The data set TESTDATA.SIZE has 3 observations and 3 variables.
前のページ|次のページ|ページの先頭へ