前のページ|次のページ

WINDOWステートメント

アプリケーションにカスタマイズしたウィンドウを作成します。

該当要素: DATAステップ
カテゴリ: ウィンドウ表示
種類: 宣言

構文

引数

window

ウィンドウの名前を指定します。

制限事項 ウィンドウの名前はSASの命名規則に従う必要があります。

window-options

ウィンドウ全体の特性を指定します。フィールドまたはGROUP=を指定する前に、次のwindow-optionsを指定します。

COLOR=color

この機能を持つ動作環境に対して、ウィンドウの背景色を指定します。この機能を持たない動作環境では、このオプションはウィンドウ枠の色に適用されます。次の色を指定できます。

BLACK MAGENTA
BLUE ORANGE
BROWN PINK
CYAN RED
GRAY WHITE
GREEN YELLOW
デフォルト COLOR=オプションに色を指定しない場合、ウィンドウの背景色は常に黒になるのではなく、デバイスによって異なります。また、フィールドの色も常に白になるのではなく、デバイスによって異なります。
ヒント 色の表示は使用するモニタによって異なります。モノクロのモニタには、COLOR=の指定は適用されません。

COLUMNS=columns

ウィンドウの列数を指定します。

デフォルト ウィンドウはモニタ上の未使用の列をすべて使用します。そのため、指定可能な列数は、使用するモニタの種類によって異なります。

ICOLUMN=column

ウィンドウを表示するモニタ内の最初の列を指定します。

デフォルト 1列目にウィンドウが表示されます。

IROW=row

ウィンドウを表示するモニタ内の最初の行を指定します。

デフォルト 1行目にウィンドウが表示されます。

KEYS=<<libref.>catalog.>keys-entry

ウィンドウで使用するファンクションキーの定義が格納されるKEYSエントリの名前を指定します。

デフォルト KEYSウィンドウで定義した現在のファンクションキーの設定が使用されます。
ヒント エントリ名を1つだけ指定すると、SASUSER.PROFILEカタログの中で指定した名前のKEYSエントリを探します。3レベル名のKEYSエントリを指定することもできます。次の形式を使用します。
libref.catalog.keys-entry
ウィンドウで使用するファンクションキーの定義を作成するには、KEYSウィンドウを使用します。必要なキーを定義します。次に、作成した定義をSAVEコマンドを使用してSASUSER.PROFILEカタログ、指定したSASライブラリとカタログに保存します。

MENU=<<libref.>catalog.>pmenu-entry

PMENUプロシジャを使用して作成したメニュー(pmenu)の名前を指定します。

ヒント エントリ名を1つだけ指定すると、SASUSER.PROFILEカタログの中で指定した名前のPMENUエントリを探します。3レベル名のPMENUを指定することもできます。次の形式を使用します。
libref.catalog.pmenu-entry

ROWS=rows

ウィンドウ内の行数を指定します。

デフォルト ウィンドウはモニタ上の未使用の行をすべて使用します。
ヒント 指定可能な行数は、使用するモニタの種類によって異なります。

field-definition(s)

ウィンドウ内または関連するフィールドのグループ内に表示する変数または文字列を指定し、その定義を追加します。

ヒント ウィンドウやグループにはフィールドをいくつでも追加できます。また、複数のグループやウィンドウに同じフィールドを定義することもできます。
複数のfield-definitionsを指定できます。
参照項目 フィールド定義

group-definition(s)

グループの名前を指定し、グループ内のすべてのフィールドを定義します。グループ定義は、2つの部分(GROUP=オプションと1つ以上のフィールド定義)で構成されます。

GROUP=group

関連するフィールドのグループを指定します。

デフォルト ウィンドウには、名前なしのフィールドグループが1つ作成されます。
制限事項 groupには、SAS名を指定する必要があります。
ヒント DISPLAYステートメントでグループを参照する場合、window.groupの形式で名前を指定します。
ウィンドウ内に同時に表示するすべてのフィールドを1つのグループに指定できます。それぞれのグループ名を指定すると、異なるタイミングで同じウィンドウ内にさまざまなフィールドを表示します。表示するグループを選択するには、DISPLAYステートメントにwindow.groupを指定します。
1つのウィンドウ内に複数のグループを指定すると、変更しないウィンドウオプションを繰り返し指定する必要はなくなり、関連性のある表示を把握するのに役立ちます。たとえば、データ値をチェックするウィンドウを定義する場合、STANDARDという名前のグループのデータセットに格納されるほとんどのデータ値に対して、変数とメッセージを表示できるように設定します。また、指定した条件をデータ値が満たす場合に、CHECKITという名前のグループに異なるメッセージを表示するように設定します。

詳細

基本

動作環境の情報: WINDOWステートメントの一部の機能は、動作環境によって異なります。詳細については、各動作環境向けのSASドキュメントを参照してください。
SASウィンドウ環境、対話型ラインモードまたは非対話型モードでWINDOWステートメントを使用すると、各自のアプリケーションにカスタマイズしたウィンドウを作成できます。 (脚注 1) 作成したウィンドウではテキストを表示したり、入力を受け付けることができます。また、ウィンドウにはコマンド行とメッセージ行が表示されます。ウィンドウ名はウィンドウの最上部に表示されます。作成したウィンドウのコマンドとファンクションキーを使用します。ウィンドウ定義は、WINDOWステートメントを指定したDATAステップのみで有効です。
ウィンドウは、表示する前に定義してください。WINDOWステートメントで作成したウィンドウを表示するには、DISPLAYステートメントを使用します。 詳細については、DISPLAYステートメントを参照してください。

フィールド定義

表示する変数や文字列、またその表示位置や属性を指定するには、フィールド定義を使用します。文字列は引用符で囲みます。項目の位置は、開始位置を行と列で指定します。属性では、色、フィールドへのデータ入力の可否、ハイライト表示などの特性を指定できます。
変数の値または文字列のどちらかを含むフィールドを定義できますが、両方を含むフィールドは定義できません。変数の値のフィールド定義の形式は次のようになります。
<row column> variable <format> options
文字列の形式は次のようになります。
<row column> 'character-string' options
フィールド定義の要素を次に示します。

row column

変数や文字列の位置を指定します。

SASではポインタを使用してウィンドウ内の位置を制御します。たとえば、変数の値をウィンドウの行2、列3に書き込むように指示すると、ポインタは行2、列3に移動してから値を書き込みます。ポインタをフィールドの適切な位置に移動させるには、ここにリストされているポインタコントロールを使用します。
フィールド定義では、rowに次のいずれかのポインタコントロールを指定できます。

#n

ウィンドウ内のn番目の行を指定します。

範囲 nは正の整数にする必要があります。

#numeric-variable

numeric-variableの値が示すウィンドウ内の行を指定します。

制限事項 #numeric-variableは正の整数にする必要があります。値が整数ではない場合、小数点以下の値を切り捨て、整数の値のみを使用します。

#(expression)

expressionの値が示すウィンドウ内の行を指定します。

制限事項 expressionには配列参照を指定できます。また、式の評価結果は正の整数でなければなりません。
expressionを丸かっこで囲みます。

/

ポインタを次の行の列1に移動させます。

フィールド定義では、columnに次のいずれかのポインタコントロールを指定できます。

@n

ウィンドウ内のn番目の列を指定します。

制限事項 nには、正の整数を指定します。

@numeric-variable

numeric-variableの値が示すウィンドウ内の列を指定します。

制限事項 numeric-variableは正の整数にする必要があります。値が整数ではない場合、小数点以下の値を切り捨て、整数の値のみを使用します。

@(expression)

expressionの値が示すウィンドウ内の列を指定します。

制限事項 expressionには配列参照を指定できます。また、式の評価結果は正の整数でなければなりません。
expressionを丸かっこで囲みます。

+n

nに指定した列数だけポインタを移動させます。

範囲 nは正の整数にする必要があります。

+numeric-variable

指定したnumeric-variableの値が示す列数だけポインタを移動させます。

制限事項 +numeric-variableの値は、正の整数または負の整数でなければなりません。値が整数ではない場合、小数点以下の値を切り捨て、整数の値のみを使用します。
デフォルト ウィンドウまたはグループの最初のフィールドでrowの指定を省略すると、ウィンドウの最初の行が使用されます。後続のフィールドでrowの指定を省略すると、前のフィールドで取得した行をそのまま使用します。columnの指定を省略すると、列1(ウィンドウの左枠)が使用されます。
ヒント rowまたはcolumnのどちらも最初に指定できますが、このドキュメントの例では行を最初に指定します。

variable

表示する変数、またはウィンドウを表示するときに入力した値を割り当てる変数を指定します。

ヒント variableには、変数名または配列参照を指定できます。
フィールドでの変数の値の表示を許可し、ユーザーによる変更は許可しないようにするには、PROTECT=オプションを使用します(このセクションの後半で説明します)。DISPLAYステートメントにNOINPUTオプションを指定すると、現在のDISPLAYステートメントを実行中にウィンドウ全体またはグループ全体を保護することもできます。
フィールド定義に新しい変数の名前が含まれる場合、その変数は作成中のデータセットに追加されます(KEEPまたはDROPを指定していない場合)。

出力形式

変数の出力形式を指定します。

デフォルト formatの指定を省略すると、他で指定した入力形式や出力形式(たとえば、ATTRIB、INFORMAT、FORMATの各ステートメントで指定した形式、またはデータセットに恒常的に格納された形式)を使用するか、SASのデフォルトの入力形式または出力形式を使用します。
ヒント フィールドに変更できない変数を表示する場合(つまり、PROTECT=YESオプションを使用する場合)、formatは、任意のSAS出力形式またはFORMATプロシジャで定義した出力形式を指定できます。
フィールドで値の表示と入力を許可する場合、INFORMATステートメントまたはATTRIBステートメントで入力形式を指定するか、$CHARやTIMEなど対応する入力形式を持つSAS出力形式を指定する必要があります。
出力形式を指定すると、入力可能なフィールドに対応する入力形式が自動的に割り当てられます。
WINDOWステートメントに出力形式と入力形式を指定すると、他で指定した入力形式と出力形式より優先されます。

'character-string'

表示する文字列のテキストを指定します。

制限事項 文字列は一重引用符で囲む必要があります。
文字列を表示するフィールドに値を入力することはできません。

options

フィールド定義属性を指定します。

ATTR=highlighting-attribute

次に示すフィールドのハイライト属性を定義します。

BLINK フィールドを点滅表示します。
HIGHLIGHT フィールドを高輝度で表示します。
REV_VIDEO フィールドを反転表示します。
UNDERLINE フィールドに下線を表示します。
別名 A=
ヒント 複数のハイライト属性を指定するにはATTR=(highlighting-attribute-1,...)の形式を使用します。
指定可能なハイライト属性は、使用するモニタの種類によって異なります。

AUTOSKIP=YES | NO

ユーザーがフィールドのすべての位置にデータを入力した場合、現在のウィンドウまたはグループ内にある次の非保護フィールドにカーソルを移動するかどうかを制御します。

YES 次の非保護フィールドにカーソルを自動的に移動するように指定します。
NO カーソルを自動的に移動させないように指定します。
別名 AUTO=
デフォルト NO

COLOR=color

変数または文字列の色を指定します。次のいずれかの色を指定できます。

BLACK MAGENTA
BLUE ORANGE
BROWN PINK
CYAN RED
GRAY WHITE
GREEN YELLOW
別名 C=
デフォルト WHITE
ヒント 画面での色の表示は使用するモニタによって異なります。
モノクロのモニタには、COLOR=の指定は適用されません。

DISPLAY=YES | NO

フィールドの内容を表示するかどうかを制御します。

YES 入力時にフィールドに文字を表示するように指定します。
NO 入力した文字を表示しないように指定します。
デフォルト YES

PERSIST=YES | NO

DISPLAYステートメントにBLANKオプションを指定するまで、DATAステップの同じ反復内でDISPLAYステートメントのすべての実行結果をフィールドに表示するかどうかを制御します。

YES これまでの各DISPLAYステートメントの実行時にフィールドに表示したすべての内容と、現在のDISPLAYステートメントで表示するように設定した内容を表示するように指定します。新しい内容の表示位置が以前の内容の表示位置と重なる場合、以前の内容は表示されません。
NO 各DISPLAYステートメントの実行時に、フィールドの現在の内容のみを表示します。
デフォルト NO
ヒント PERSIST=は、DISPLAYステートメントを実行するたびにフィールドの位置を変更する場合に便利です。
フィールドの保持と非保持

PROTECT=YES | NO

フィールドへの入力を許可するかどうかを制御します。

YES 情報の入力を許可しないように指定します。
NO 情報の入力を許可するように指定します。
別名 P=
デフォルト No
ヒント 変数を含むフィールドにのみPROTECT=を使用します。テキストを表示するフィールドは自動的に保護されます。

REQUIRED=YES | NO

フィールドへの入力を任意にするかどうかを制御します。

NO フィールドへの入力を任意にするように指定します。
YES フィールドへの入力を必須にするように指定します。
デフォルト NO
ヒント REQUIRED=YESに定義したフィールドをブランクのままにすると、ウィンドウ内の後続のフィールドに値を入力できなくなります。

自動変数

WINDOWステートメントでは、_CMD_および_MSG_という2つの自動SAS変数が作成されます。

_CMD_

ウィンドウのコマンド行から入力されたコマンドの中で、ウィンドウで認識されなかった最後のコマンドが格納されます。

ヒント _CMD_は長さが80バイトの文字変数です。この値は、DISPLAYステートメントを実行する前に' '(ブランク)に設定されます。
メッセージの送信

_MSG_

ウィンドウのメッセージ領域に表示するように指定したメッセージが格納されます。

ヒント _MSG_は長さが80バイトの文字変数です。この値は、DISPLAYステートメントを実行した後に' '(ブランク)に設定されます。
メッセージの送信

ウィンドウを表示する

DISPLAYステートメントを使用すると、ウィンドウを表示することができます。一度表示されたウィンドウは、他のウィンドウを表示するか、DATAステップが終了するまで表示されます。値の入力フィールドを含むウィンドウが表示された場合、次の画面に移動するには、非保護フィールドで値を入力するかEnterキーを押す必要があります。ウィンドウ表示中にコマンドやファンクションキーを使用すると、他のウィンドウの表示や現在のウィンドウのサイズ変更などを実行できます。すべての非保護フィールドでEnterキーを押した場合にのみ、処理が次の画面に移動します。
DISPLAYステートメントを含むDATAステップは、次のいずれかが検出されるまで実行されます。
  • SET、MERGE、MODIFY、UPDATE、INPUTの各ステートメントで読み込まれた最後のオブザベーションの処理の完了
  • STOPまたはABORTステートメントの実行
  • ENDコマンドの実行

比較

  • WINDOWステートメントではウィンドウを作成し、DISPLAYステートメントではウィンドウを表示します。
  • マクロ言語の%WINDOWステートメントと%DISPLAYステートメントは、マクロ機能で制御されるウィンドウの作成と表示を行います。

例1: 1つのウィンドウを作成する

次のDATAステップでは、1つのフィールドグループを持つ1つのウィンドウを作成します。
data _null_;
   window start
          #9  @26 'WELCOME TO THE SAS SYSTEM'
                  color=black
          #12  @19 'THIS PROGRAM CREATES'
          #12  @40 'TWO SAS DATA SETS'
          #14 @26 'AND USES THREE PROCEDURES'
          #18 @27 'Press ENTER to continue';
    display start;
    stop;
run;
1つのフィールドグループを持つ1つのウィンドウの表示
STARTウィンドウは全画面に表示されます。テキストの最初の行は黒で表示されます。他の3行は使用する動作環境のデフォルトの色で表示されます。テキストはプログラムに指定した列位置から表示されます。STARTウィンドウでは値を入力する必要はありません。ただし、ウィンドウを終了する場合は、次のいずれかを実行します。
  • Enterキーを押して、DATAステップの処理をSTOPステートメントまで進める。
  • ENDコマンドを発行する。
このプログラムでSTOPステートメントを省略すると、ファンクションキーまたはコマンド行を使用してウィンドウからENDコマンドを実行するまで、DATAステップは繰り返し実行されます。(このDATAステップではオブザベーションを読み込まないので、DATAステップの実行を終了させるファイル終端指示子を検出できません。)

例2: 2つのウィンドウを同時に表示する

次のステートメントでは、レポータにニュース記事を割り当てます。記事のトピックリストは、SASデータセットcategory.articleに変数として格納されます。このアプリケーションでは、各トピックをライタに割り当て、割り当てたトピック数の合計を確認できるようにします。このプログラムではAssignmentという新しいSASデータセットが作成されます。
libname category 'SAS-library';
data Assignment;
   set category.article end=final;
   drop a b j s o;
   window Assignment irow=1 rows=12 color=white
          #3 @10 'Article:' +1 art protect=yes
          'Name:' +1 name $14.;
   window Showtotal irow=20 rows=12 color=white
          group=subtotal
          #1 @10 'Adams has' +1 a
          #2 @10 'Brown has' +1 b
          #3 @10 'Johnson has' +1 j
          #4 @10 'Smith has' +1 s
          #5 @10 'Other has' +1 o
          group=lastmessage
          #8 @10
          'ALL ARTICLES ASSIGNED. 
          Press ENTER to stop processing.';
   display Assignment blank;
   if name='Adams' then a+1;
   else if name='Brown' then b+1;
   else if name='Johnson' then j+1;
   else if name='Smith' then s+1;
   else o+1;
   display Showtotal.subtotal blank noinput;
   if final then display Showtotal.lastmessage;
run;
DATAステップを実行すると、次のウィンドウが表示されます。
AssignmentウィンドウとShowtotalウィンドウの表示
モニタ上部に表示されるAssignmentウィンドウには、記事の名前とレポータの名前を入力するフィールドが表示されます。名前を入力してEnterキーを押すと、モニタ下部にShowtotalウィンドウが表示されます。このウィンドウには各レポータに割り当てた記事数(直前に実行した割り当ても含む)が表示されます。割り当てを続けると、Showtotalウィンドウの値が更新されます。DATAステップの最後の繰り返しを実行中に、すべての記事が割り当てられたことを示すメッセージが表示され、Enterキーを押して処理を終了するように指示されます。

例3: フィールドの保持と非保持

この例では、PERSIST=オプションを説明します。現在のウィンドウにカーソルを置いてEnterキーを押すと、1つのウィンドウから別のウィンドウに移動します。
data _null_;
   array row{3} r1-r3;
   array col{3} c1-c3;
   input row{*} col{*};
   window One
          rows=20 columns=36
          #1 @14 'PERSIST=YES' color=black
          #(row{i}) @(col{i}) 'Hello'
          color=black persist=yes;
   window Two
          icolumn=43 rows=20 columns=36
          #1 @14 'PERSIST=NO' color=black
          #(row{i}) @(col{i}) 'Hello'
          color=black persist=no;
   do i=1 to 3;
      display One;
      display Two;
   end;
   datalines;
5 10 15 5 10 15
;
3回目の反復実行後、DATAステップの実行結果が次のウィンドウに表示されます。
3回目の反復後にDATAステップの実行結果が表示される2つのウィンドウ
ウィンドウOneには、3個所の表示位置にHelloが表示されます。ウィンドウTwoには、3回目の最後の反復でHelloが表示された位置のみ表示されます。

例4: メッセージの送信

この例では、自動変数_CMD_および_MSG_を使用して、WINDOWステートメントで定義したウィンドウ内でエラーのあるコマンドが実行されたときにメッセージを送信します。
if _cmd_ ne ' ' then
   _msg_='CAUTION: UNRECOGNIZED COMMAND' || _cmd_;
エラーのあるコマンドを入力すると、そのエラーのあるコマンドのテキストが自動変数_CMD_の値に設定されます。_CMD_の値はブランクではなくなったので、IFステートメントの評価結果は真になります。このため、続くTHENステートメントは、CAUTION:UNRECOGNIZED COMMANDという文字列と自動変数_CMD_の値(合計80バイトまで)を連結して作成した値を自動変数_MSG_に割り当てます。DISPLAYステートメントの次回の実行時に、ウィンドウと次のメッセージ行を表示します。
CAUTION: UNRECOGNIZED COMMAND command
commandは、不正なウィンドウコマンドです。

例5: SASデータセットを作成する

次のステートメントでは、WINDOWステートメントでの入力内容を使用して、SASデータセットを作成します。
data new;
   length name $20;
   window start
      #3  @20 'Type the variable name'
      #4  @20 'and press the Enter key.'
      #7 'Name:' +1 name attr=underline
      #11 'When you are finished entering variable names, type "end"'
      #12 'at the command line.';
   display start;
run;
proc print;
run;
SASデータセットの作成に使用する入力ウィンドウ

関連項目:

XisError: No pubcode in link data found for lrcon
XisError: No pubcode in link data found for proc
ステートメント:
脚注 1:コンピュータはバッチ実行プロセスに接続できないので、バッチモードでWINDOWステートメントを実行することはできません。[戻る]
前のページ|次のページ|ページの先頭へ