前のページ|次のページ

PUTステートメント、フォーマット

指定した出力形式で変数の値を出力行に書き込みます。

該当要素: DATAステップ
カテゴリ: ファイル操作
種類: 実行

構文

引数

pointer-control

指定した行または列に出力ポインタを移動させます。

参照項目 カラムポインタコントロール
行ポインタコントロール
フォーマット値の間に文字を書き込む

variable

変数の名前を指定します。指定した変数の値が書き込まれます。

(variable-list)

変数のリストを指定します。指定した変数の値が書き込まれます。

要件 (format-list)は(variable-list)の後ろに指定する必要があります。
参照項目 変数と出力形式をグループ化する方法
フォーマット値の間に文字を書き込む

format.

変数の値を書き込むときに使用する出力形式を指定します。デフォルトの配置を無効にするには、配置の指定を出力形式に追加します。

-L 値を左揃えにします。
-C 値を中央揃えにします。
-R 値を右揃えにします。
ヒント 出力形式の長さには、値に加えて出力形式の指定に使用するカンマ、ドル記号、小数点、その他の特殊文字を表示するのに十分なスペースを指定してください。
次のPUTステートメントでは、出力形式dollar7.2を使用してXの値を書き込みます。
put x dollar7.2;
Xが100の場合、フォーマット値は7列使用します。
$100.00
フォーマット値のデフォルトの配置を無効にする

(format-list)

出力形式のリストを指定します。このリストは、前に指定した変数リストの値を書き込むときに使用します。PUTステートメントでは、format-listに次を指定できます。

の形式で書き込まれる値を指定します。

変数の値を書き込むときに使用する出力形式を指定します。

ヒント SAS出力形式またはユーザー定義の出力形式のどちらかを指定できます。
参照項目 SAS出力形式と入力形式: リファレンス

pointer-control

値の読み込み位置を指示するポインタコントロール(@、#、/、+、OVERPRINT)を1つ指定します。

フォーマット値の間に文字を書き込む

character-string

フォーマット値の間に追加する1つまたは複数の文字を指定します。

次のステートメントでは、フォーマット値CODE1、CODE2、CODE3の間にハイフンを追加します。
put bldg $ (code1 code2 code3) (3. '-');
フォーマット値の間に文字を書き込む

n*

出力形式リストでn*に続けて指定した出力形式をn回繰り返します。

制限事項 (format-list)は(variable-list)の後ろに指定する必要があります。
参照項目 変数と出力形式をグループ化する方法
次のステートメントでは、7.2出力形式を使用してGRADES1、GRADES2、GRADES3を書き込み、5.2出力形式を使用してGRADES4、GRADES5を書き込みます。
put (grades1-grades5) (3*7.2, 2*5.2);

@| @@

次のPUTステートメントの実行時に使用できるように出力行を保持します。このラインホールド指定子は、後置@および後置@@と呼ばれます。

制限事項 後置@または後置@@は、PUTステートメントの最後の項目として指定する必要があります。
参照項目 ラインホールド指定子の使用

詳細

フォーマット出力の使用

フォーマット出力では、出力行を指定するために、変数名とその変数の値を書き込むときに使用する出力形式をリストします。SAS出力形式またはユーザー定義の出力形式を使用して、変数の値の出力形式を制御することができます。SAS出力形式の詳細については、XisError: No pubcode in link data found for leforinforrefを参照してください。
フォーマット出力では、PUTステートメントでは、変数の値を書き込むときに使用する出力形式を変数名の後ろに指定します。値の間にブランクは自動的に追加されません。指定した列数より少ない列数で値を出力できる場合、出力形式の幅で指定されたフィールド内に文字の値は左寄せ、数値は右寄せで表示されます。
フォーマット出力とポインタコントロールを組み合わせて使用すると、変数の値を書き込む行と列の位置を正確に指定できます。次のPUTステートメントではdollar7.2出力形式を使用し、列12の位置から中央揃えでXの値を表示します。
put @12 x dollar7.2-c;

変数と出力形式をグループ化する方法

特定のパターンで出力行に値を書き込む場合、出力形式リストを使用するとコードを書く時間を短縮することができます。出力形式リストは、出力形式をブランクまたはカンマで区切り、丸かっこで囲みます。出力形式リストは、丸かっこで囲んだ変数名のリストの後に指定する必要があります。
たとえば、次のステートメントでは、出力形式リストを使用してSCORE1からSCORE5までの5つの変数を順に書き込みます。各変数の値の出力に列を4つ使用します。また、値の間にブランクは追加しません。
put (score1-score5) (4. 4. 4. 4. 4.);
前述のステートメントを次のように簡略化できます。
put (score1-score5) (4.);
出力形式リストには、任意のポインタコントロール(@、#、/、+、OVERPRINT)、n*、および文字列を挿入できます。PUTステートメントには必要な数の出力形式リストを使用できますが、出力形式リストはネストさせないでください。変数リストにあるすべての値が書き込まれると、PUTステートメントは出力形式リストに残っている指示を無視します。例については、必要な数以上の出力形式が指定されている場合を参照してください。
配列に含まれるすべての要素への参照も指定できます。出力形式リストの前に、(array-name {*})を指定します。ただし、この場合、_TEMPORARY_配列内の要素を指定することはできません。次のPUTステートメントでは配列名と出力形式リストを指定します。
put (array1{*}) (4.);
配列の参照方法の詳細については、配列を参照してください。

例1: フォーマット値の間に文字を書き込む

この例では、一部の値をフォーマットし、変数BLDGとROOMの間に-(ハイフン)を1つ書き込みます。
data _null_;
   input name & $15. bldg $ room;
   put name @20 (bldg room) ($1. "-" 3.);
   datalines;
Bill Perkins  J 126
Sydney Riley  C 219
;
次の行がSASログに書き込まれます。
Bill Perkins       J-126
Sydney Riley       C-219

例2: フォーマット値のデフォルトの配置を無効にする

この例では出力形式に配置方法を指定します。
data _null_;
   input name $ 1-12 score1 score2 score3;
   put name $12.-r +3 score1 3. score2 3. 
       score3 4.;
   datalines;
Joseph                  11   32   76
Mitchel                 13   29   82
Sue Ellen               14   27   74
;
次の行がSASログに書き込まれます。 (脚注 1)
----+----1----+----2----+----3----+----4
      Joseph    11 32  76
     Mitchel    13 29  82
   Sue Ellen    14 27  74
文字変数NAMEの値はフォーマットフィールドに右寄せで表示されています。(文字変数の場合、デフォルト設定は左寄せです。)

例3: 必要な数以上の出力形式が指定されている場合

次の出力形式リストには、PUTステートメントの実行時に必要となる数よりも多い出力形式が指定されています。
data _null_;
   input x y z; 
   put (x y z) (2.,+1);
   datalines;
2 24 36
0 20 30
;
このPUTステートメントでは、出力形式2.を使用してXの値を書き込みます。カラムポインタコントロールは+1と指定されているため、ポインタを1列だけ前方(右)に移動します。次に、出力形式2.を使用してYの値を書き込みます。カラムポインタコントロールは+1と指定されているため、再度ポインタを1列だけ前方(右)に移動します。最後に、出力形式2.を使用してZの値を書き込みます。3回目の繰り返しでは、PUTステートメントはポインタコントロールの移動を指示する+1を無視します。
次の行がSASログに書き込まれます。 (脚注 2)
----+----1----+
2 24 36
0 20 30

関連項目:

ステートメント:
脚注 1:理解しやすいようにルーラー付きの行が表示されていますが、PUTステートメントではこの行は生成されません。[戻る]
脚注 2:理解しやすいようにルーラー付きの行が表示されていますが、PUTステートメントではこの行は生成されません。[戻る]
前のページ|次のページ|ページの先頭へ