前のページ|次のページ

PUTステートメント、リスト

変数値と指定した文字列を出力行に書き込みます。

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

構文

引数

pointer-control

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

参照項目 カラムポインタコントロール
行ポインタコントロール
文字列と変数値の書き込み

variable

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

リスト出力の値の書き込み

n*

後ろに指定する文字列をn回繰り返します。

次のステートメントでは、出力行にアンダースコアを132回書き込みます。
put 132*'_';

'character-string'

書き込む文字列を一重引用符で囲んで指定します。

操作 指定した文字列全体を書き込むスペースが現在の行に残されていない場合、指定した文字列を保留して、現在の行を書き込みます。次に、新しい行の列1からこの保留した文字列を書き込みます。詳細については、ポインタが行の終わりを超える場合を参照してください。
ヒント 誤って解釈されるのを防ぐため、PUTステートメントで使用する終了引用符の後ろには常にブランクを追加してください。
引用符の後ろにXがある場合、指定した文字列が16進定数であると判断されます。
文字列として複数の一重引用符(`)または二重引用符(“)を間にブランクを挿入せずに使用する場合、1つの一重引用符( ')または二重引用符(“)が出力されます。
参照項目 リスト出力のスペース設定方法
文字列と変数値の書き込み

:

PUTステートメントで変数値を書き込むときに使用する出力形式を指定できます。値の先頭または末尾にあるブランクは削除されます。また、値の後ろにブランクが1つ追加されます。

要件 出力形式を指定する必要があります。
参照項目 修飾リスト出力とフォーマット出力の違い
修飾リスト出力(:)を用いた値の書き込み

~

PUTステートメントで変数値を書き込むときに使用する出力形式を指定できます。フォーマット値に区切り文字が含まれていない場合でも、フォーマット値を引用符で囲んで表示します。値の先頭または末尾にあるブランクは削除されます。また、値の後ろにブランクが1つ追加されます。デフォルトでは、文字変数の欠損値はブランク(" ")として書き込まれ、数値の欠損値はピリオド(" ")として書き込まれます。

要件 FILEステートメントにDSDオプションを指定する必要があります。
修飾リスト出力(~)を用いた値の書き込み

format.

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

ヒント SAS出力形式またはユーザー定義の出力形式のどちらかを指定できます。使用例については、 SAS出力形式と入力形式: リファレンス
修飾リスト出力(:)を用いた値の書き込み

@ | @@

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

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

詳細

リスト出力の使用

リスト出力を使用する場合、値を書き込む変数名をリストするか、文字列を引用符で囲んで指定します。PUTステートメントは変数値を書き込んだ後、ブランクを1つ挿入してから次の値を書き込みます。数値の欠損値は1つのピリオドとして書き込まれます。文字列はフィールドに左寄せで表示されます。また文字列の先頭と末尾にあるブランクは削除されます。それぞれの値の後ろに追加されるブランク以外に、ブランクを挿入するには、リスト出力ではなく、フォーマット出力またはカラム出力を使用します。
リスト出力には、次の2種類があります。
  • 単純リスト出力
  • 修飾リスト出力
修飾リスト出力では、出力形式を指定して変数値を書き込む方法を制御できるため、PUTステートメントの用途が広がります。 この出力の内容については修飾リスト出力(:)を用いた値の書き込みを参照してください。

リスト出力のスペース設定方法

リスト出力では、変数値を書き込む場合と文字列を書き込む場合に異なるスペース設定方法を使用します。リスト出力を使用して変数値を書き込む場合、ブランクが自動的に挿入されます。そのため、出力ポインタは変数値の後の2列目に移動します。ただし、文字列を書き込む場合はブランクは自動的に挿入されません。この場合、出力ポインタは文字列の最終文字のすぐ後の列に移動します。
文字列や変数値の書き込み時にスペース設定の問題が発生しないように、文字列の最終文字としてブランクを1つ追加することをお勧めします。変数値の後ろに句読点を提供する文字列を続ける場合、出力ポインタを戻す必要があります。出力ポインタを戻すことで、出力行に不要なブランクが挿入されることを防げます。 文字列と変数値の書き込みを参照してください。

修飾リスト出力とフォーマット出力の違い

リスト出力とフォーマット出力では、変数を書き込んだ後のポインタの移動先を決定する方法が異なります。そのため、出力形式を使用する修飾リスト出力とフォーマット出力で、出力行の結果が異なります。修飾リスト出力では、値を書き込みブランクを1つ挿入してから、ポインタを次の列に移動します。フォーマット出力では、値が指定した出力形式の長さに満たない場合でも、出力形式の長さの分だけポインタを移動します。ポインタは、ブランクを挿入せずに、次の列に移動します。
次のDATAステップでは、修飾リスト出力を使用して各出力行を書き込みます。
data _null_;
   input x y;
   put x : comma10.2 y : 7.2;
   datalines;
2353.20 7.10
6231 121
;
次の行がSASログに書き込まれます。
----+----1----+----2
2,353.20 7.10
6,231.00 121.00
比較するため、次の例ではフォーマット出力を使用します。
put x comma10.2 y 7.2;
次の行がSASログに書き込まれます。列内の値の位置が揃えられています。
----+----1----+----2
  2,353.20   7.10
  6,231.00 121.00

例1: リスト出力の値の書き込み

次のDATAステップでは、PUTステートメントでリスト出力を使用して変数値をSASログに書き込みます。
data _null_;
   input name $ 1-10 sex $ 12 age 15-16;
   put name sex age;
   datalines;
Joseph     M  13
Mitchel    M  14
Sue Ellen  F  11
;
次の行がSASログに書き込まれます。
----+----1----+----2----+----3----+----4
Joseph M 13
Mitchel M 14
Sue Ellen F 11
デフォルトでは、文字変数NAMEの値はフィールド内に左寄せで表示されます。

例2: 文字列と変数値の書き込み

次のPUTステートメントでは、文字列の最後にブランクが1つ追加されます。また、出力行で変数STARTWGHTの後ろに不要なブランクが表示されないように、出力ポインタを戻します。
data _null_;
   input idno name $ startwght;
   put name 'weighs ' startwght +(-1) '.';
   datalines;
032 David 180
049 Amelia 145
219 Alan 210
;
次の行がSASログに書き込まれます。
David weighs 180.
Amelia weighs 145.
Alan weighs 210.
文字列の最後にブランクが追加されるため、ポインタの位置が変わります。このブランクによって、文字列と後続の変数値が区切られます。ポインタコントロールを+(-1)と指定しているので、ポインタが戻り、STARTWGHTの値とピリオドの間の不要なブランクが削除されます。

例3: 修飾リスト出力(:)を用いた値の書き込み

次のDATAステップでは、:引数付きの修飾リスト出力を使用して、複数の変数値を出力行に書き込みます。
data _null_;
   input salesrep : $10. tot : comma6. date : date9.;
   put 'Week of ' date : worddate15. 
       salesrep : $12. 'sales were ' 
       tot : dollar9.  + (-1) '.';
   datalines;
Wong 15,300 12OCT2004
Hoffman 9,600 12OCT2004
;
次の行がSASログに書き込まれます。
Week of Oct 12, 2004 Wong sales were $15,300.
Week of Oct 12, 2004 Hoffman sales were $9,600.

例4: 修飾リスト出力(~)を用いた値の書き込み

次のDATAステップでは、~引数付きの修飾リスト出力を使用して、複数の変数値を出力行に書き込みます。
data _null_;
   input salesrep : $10. tot : comma6. date : date9.;
   file log delimiter=" " dsd;
   put 'Week of ' date ~ worddate15. 
       salesrep ~ $12. 'sales were ' 
       tot ~ dollar9.  + (-1) '.';
   datalines;
Wong 15,300 12OCT2004
Hoffman 9,600 12OCT2004
;
次の行がSASログに書き込まれます。
Week of "Oct 12, 2004" "Wong" sales were "$15,300".
Week of "Oct 12, 2004" "Hoffman" sales were "$9,600".

関連項目:

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