SASログ、SASアウトプットウィンドウ、または最後のFILEステートメントに指定した外部の場所に行を出力します。
該当要素: | DATAステップ |
カテゴリ: | ファイル操作 |
種類: | 実行 |
書き込む内容、書き込み方法、書き込み先を指定します。specificationには次を指定できます。
変数の名前を指定します。指定した変数の値が書き込まれます。
変数のリストを指定します。指定した変数の値が書き込まれます。
要件 | (format-list)は(variable-list)の後ろに指定する必要があります。 |
参照項目 | PUTステートメント、フォーマット |
書き込む文字列を一重引用符で囲んで指定します。
ヒント | 16進数の文字列をEBCDICまたはASCIIで書き込むには、終了引用符の後ろにx を追加します。
|
間にブランクを含まない一重引用符('')または二重引用符("")の記号のみをテキスト文字列として指定すると、一重引用符( ')または二重引用符(")がそれぞれ出力されます。 | |
参照項目 | リスト出力 |
例 | 次のステートメントでは、16進数の文字列をASCII文字に変換してから、HELLOと書き込みます。 put '68656C6C6F'x; |
後ろに指定する文字列をn回繰り返します。
例 | 次のステートメントでは、出力行にアンダースコアを132回書き込みます。 put 132*'_'; |
例 | テキストに下線を引く |
出力バッファ内の指定した行または列に出力ポインタを移動させます。
参照項目 | カラムポインタコントロール |
行ポインタコントロール |
値を書き込む出力行内の列位置を指定します。
参照項目 | カラム出力 |
例 | ポインタをページ内で移動させる |
変数の値を書き込むときに使用する出力形式を指定します。
参照項目 | フォーマット出力 |
例 | 1つのPUTステートメントで複数の出力スタイルを使用する |
出力形式のリストを指定します。このリストは、前に指定した変数リストの値を書き込むときに使用します。
制限事項 | (format-list)は(variable-list)の後ろに指定する必要があります。 |
参照項目 | PUTステートメント、フォーマット |
現在の入力ファイルから、またはDATELINESステートメントの後ろに指定したデータ行のどちらかから読み込んだ最後の入力データレコードを書き込みます。
ヒント | _INFILE_は、現在のINPUTバッファを参照する自動変数です。他のSASステートメントでもこの自動変数を使用できます。 |
最後に使用したINPUTステートメントが行ポインタコントロールを使用して複数の入力データレコードを読み込む場合、PUT _INFILE_では、入力ポインタが置かれたレコードのみを書き込みます。 | |
例 | 次のPUTステートメントでは、1行目の入力データレコードの値をすべて書き込みます。 input #3 score #1 name $ 6-23; put _infile_; |
例 | 現在の入力レコードをログに書き込む |
現在のDATAステップにて定義されるすべての変数の値を、自動変数を含めて書き込みます。名前付き出力を使用します。
参照項目 | 名前付き出力 |
(FILEステートメントのODSオプションで定義される)すべての列のデータ値を特別なバッファに移動します。データの値は移動先からデータコンポーネントに書き込まれます。FILEステートメントのODSオプションは、DATAステップの結果を保持するデータコンポーネントの構造を定義します。
制限事項 | _ODS_は、FILEステートメントにODSオプションを事前に指定した場合にのみ使用できます。 |
操作 | _ODS_による特定の列へのデータの書き込みは、PUTステートメントでカラムポインタを使用して、その列に変数を指定していない場合に限られます。つまり、列への変数の指定は、_ODS_オプションより優先されます。 |
ヒント | 変数の指定やカラムポインタと組み合わせて、_ODS_を指定できます。また、PUTステートメントのどの位置にでも指定できます。 |
参照項目 | XisError: No pubcode in link data found for odsug |
次のPUTステートメントの実行時に使用できるように出力行を保持します。このラインホールド指定子は、後置@および後置@@と呼ばれます。
制限事項 | 後置@または後置@@は、PUTステートメントの最後の項目として指定する必要があります。 |
ヒント | ポインタを現在の位置に保持するには、@または@@を使用します。次のPUTステートメントは、新しい出力行ではなく同じ出力行に書き込みます。 |
参照項目 | ラインホールド指定子の使用 |
例 | 出力行の保持と解放 |
ポインタを列nに移動させます。
範囲 | 正の整数 |
例 | @15が指定されているため、NAMEの値を書き込む前に、ポインタを列15に移動させます。 put @15 name $10.; |
例 | ポインタをページ内で移動させる およびテキストに下線を引く |
指定したnumeric-variableの値が示す列にポインタを移動させます。
範囲 | 正の整数 |
ヒント | nが整数ではない場合、小数点以下の値を切り捨て、整数の値のみを使用します。nが0または負の場合、ポインタは列1に移動します。 |
例 | 変数Aの値に従って、NAME変数の値を書き込む前に、ポインタを列15に移動させます。 a=15; put @a name $10.; |
例 | ポインタをページ内で移動させる |
指定したexpressionの値が示す列にポインタを移動させます。
範囲 | 正の整数 |
ヒント | expressionの実行結果が整数ではない場合、小数点以下の値を切り捨て、整数の値のみを使用します。値が0になる場合、ポインタは列1に移動します。 |
例 | 式の結果に従って、NAME変数の値を書き込む前に、ポインタを列15に移動させます。 b=5; put @(b*3) name $10.; |
nに指定した列数だけポインタを移動させます。
範囲 | 正の整数または0 |
ヒント | nが整数ではない場合、小数点以下の値を切り捨て、整数の値のみを使用します。 |
例 | 次のステートメントでは、ポインタを列23に移動させ、LENGTHの値を列23から26に書き込みます。次に、ポインタを5列だけ右に移動させ、列32から35にWIDTHの値を書き込みます。
put @23 length 4. +5 width 4.; |
指定したnumeric-variableの値が示す列数だけポインタを移動させます。
範囲 | 正の整数、負の整数、または0 |
ヒント | numeric-variableの値が整数ではない場合、小数点以下の値を切り捨て、整数の値のみを使用します。numeric-variableの値が負の値の場合、ポインタを後方(左)へ移動させます。ただし、現在の列位置が1未満になる場合、ポインタは列1に移動します。値が0の場合、ポインタは移動しません。この値が出力バッファの長さを超える場合、現在の行を書き込んだ後、ポインタは次の行の列1に移動します。 |
指定したexpressionの値が示す列数だけポインタを移動させます。
範囲 | expressionの実行結果は正の整数でなければなりません。 |
ヒント | expressionの実行結果が整数ではない場合、小数点以下の値を切り捨て、整数の値のみを使用します。expressionの実行結果が負の値の場合、ポインタを左に戻します。ただし、現在の列位置が1未満になる場合、ポインタは列1に移動します。値が0の場合、ポインタは移動しません。この値が出力バッファの長さを超える場合、現在の行を書き込んだ後、ポインタは次の行の列1に移動します。 |
例 | ポインタをページ内で移動させる |
行nの列1にポインタを移動させます。
範囲 | 正の整数 |
例 | #2と指定されているので、ポインタはIDの値を列3と4に書き込む前に2行目に移動します。 put @12 name $10. #2 id 3-4; |
指定したnumeric-variableの値が示す行の列1にポインタを移動させます。
範囲 | 正の整数 |
ヒント | numeric-variableの値が整数ではない場合、小数点以下の値を切り捨て、整数の値のみを使用します。 |
指定したexpressionの値が示す行の列1にポインタを移動させます。
範囲 | expressionの実行結果は正の整数でなければなりません。 |
ヒント | expressionの実行結果が整数ではない場合、小数点以下の値を切り捨て、整数の値のみを使用します。 |
ポインタを次の行の列1に移動させます。
注 | 1つまたは複数の“/”行ポインタコントロールを使用してSASログにブランク行を追加しようとしても、ブランク行は生成されません。それ以外の出力形式では、ブランク行が生成されます。 |
例 | 変数NAMEとAGEの値を1行目に書き込んでから、ポインタを2行目に移動させ、列3と4に変数IDの値を書き込みます。 put name age / id 3-4; |
例 | ポインタを新しいページに移動させる |
キーワードOVERPRINTの後ろに指定した値を、直前に書き込んだ出力行に重ねて書き込みます。
要件 | この出力はファイルに送信する必要があります。FILEステートメントのN=オプションを1に設定し、PUTステートメントの出力先をファイルに設定してください。 |
ヒント | OVERPRINTは、画面に書き込まれる行には影響しません。 |
テキストを重ねて出力する場合、カラムポインタコントロールと行ポインタコントロールと組み合わせてOVERPRINTを使用します。 | |
例 | 次のステートメントでは列15からアンダースコアを重ねて出力し、タイトルに下線を表示します。 put @15 'Report Title' overprint @15 '____________'; |
例 | テキストに下線を引く |
ポインタを新しいページの最初の行に移動させます。ポインタが新しいページの最初の行の最初の列にある場合でも移動を実行します。
ヒント | 現在の出力ファイルにキャリッジコントロール文字が含まれている場合、_BLANKPAGE_は適切なキャリッジコントロール文字を含む出力行を生成します。 |
例 | ポインタを新しいページに移動させる |
ポインタを新しいページの最初の行に移動させます。行が現在のPAGESIZE=に指定された値を超えると、自動的に新しいページが開始されます。
ヒント | 現在の出力ファイルを書き込む場合に、_PAGE_オプションは適切なキャリッジコントロール文字を含む出力行を生成します。_PAGE_オプションは、書き込まれていないファイルには影響しません。 |
対話型SASセッションでFILE PRINTを指定すると、アウトプットウィンドウではフォームフィードコントロール文字が改ページと解釈されるので、その文字は出力から削除されます。結果として生成されるファイルは、改ページ文字を含まないフラットファイルになります。フォームフィード文字をファイルに含める必要がある場合、FILEステートメントに物理ファイルの場所とPRINTオプションを指定する必要があります。 | |
例 | ポインタを新しいページに移動させる |
put name 6-15 age 17-19;
----+----1----+----2----+ Peterson 21 Morgan 17
put name age;
----+----1----+----2----+ Peterson 21 Morgan 17
put name $char10. age 2. +1 date mmddyy10.;
----+----1----+----2----+ Peterson 21 07/18/1999 Morgan 17 11/12/1999
put name= age=;
----+----1----+----2----+ name=Peterson age=21 name=Morgan age=17
put name 'on ' date mmddyy8. ' weighs ' startwght +(-1) '.' idno= 40-45;
put 'Player:' name1 'Player:' name2 'Player:' name3;
変数の開始文字
|
説明
|
例
|
---|---|---|
b
|
ビットテスト定数
|
'00100000'b
|
d
|
日付定数
|
'01jan04'd
|
dt
|
日時定数
|
'18jan2003:9:27:05am'dt
|
n
|
名前リテラル
|
'My Table'n
|
t
|
時間定数
|
'9:25:19pm't
|
x
|
16進法表記
|
'534153'x
|
ポインタコントロール
|
相対指定
|
絶対指定
|
---|---|---|
カラムポインタコントロール
|
+n
|
@n
|
+numeric-variable
|
@numeric-variable
|
|
+(expression)
|
@(expression)
|
|
行ポインタコントロール
|
/、_PAGE_、
_BLANKPAGE_
|
#n
#numeric-variable
#(expression)
|
OVERPRINT
|
なし
|
|
ラインホールド指定子
|
@
|
(なし)
|
@@
|
(なし)
|
PUT array-name{*};
PUT array-name{*}(format|format.list)
data club1; input idno name $ startwght date : date7.; put name 'on ' date mmddyy8. ' weighs ' startwght +(-1) '.' idno= 32-40; datalines; 032 David 180 25nov99 049 Amelia 145 25nov99 219 Alan 210 12nov99 ;
----+----1----+----2----+----3----+----4 David on 11/25/99 weighs 180. idno=1032 Amelia on 11/25/99 weighs 145. idno=1049 Alan on 11/12/99 weighs 210. idno=1219
put @15 totalsales;
data _null_; set carsales; column=15; put @column totalsales comma6.; run;
data carsales; input item $10. jan : comma5. feb : comma5. mar : comma5.; saleqtr1=sum(jan,feb,mar); /* an expression moves pointer backward */ put '1st qtr sales for ' item 'is ' saleqtr1 : comma6. +(-1) '.'; /* a numeric variable with a negative value moves pointer backward. */ x=-1; put '1st qtr sales for ' item 'is ' saleqtr1 : comma5. +x '.'; datalines; trucks 1,382 2,789 3,556 vans 1,265 2,543 3,987 sedans 2,391 3,011 3,658 ;
----+----1----+----2----+----3----+----4 st qtr sales for trucks is 7,727. st qtr sales for trucks is 7,727. st qtr sales for vans is 7,795. st qtr sales for vans is 7,795. st qtr sales for sedans is 9,060. st qtr sales for sedans is 9,060.
data _null_; set carsales end=lastrec; totalsales+saleqtr1; if lastrec then put @2 'Total Sales for 1st Qtr' / totalsales 10-15; run;
----+----1----+----2----+----3 Total Sales for 1st Qtr 24582
title1; data statepop; input state $ cityp90 ncityp90 region @@; label cityp90= '1990 metropolitan population (million)' ncityp90='1990 nonmetropolitan population (million)' region= 'Geographic region'; datalines; ME .443 .785 1 NH .659 .450 1 VT .152 .411 1 MA 5.788 .229 1 RI .938 .065 1 CT 3.148 .140 1 NY 16.515 1.475 1 NJ 7.730 .A 1 PA 10.083 1.799 1 DE .553 .113 2 MD 4.439 .343 2 DC .607 . 2 VA 4.773 1.414 2 WV .748 1.045 2 NC 4.376 2.253 2 SC 2.423 1.064 2 GA 4.352 2.127 2 FL 12.023 .915 2 KY 1.780 1.906 2 TN 3.298 1.579 2 AL 2.710 1.331 2 MS .776 1.798 2 AR 1.040 1.311 2 LA 3.160 1.060 2 OK 1.870 1.276 2 TX 14.166 2.821 2 OH 8.826 2.021 3 IN 3.962 1.582 3 IL 9.574 1.857 3 MI 7.698 1.598 3 WI 3.331 1.561 3 MN 3.011 1.364 3 IA 1.200 1.577 3 MO 3.491 1.626 3 ND .257 .381 3 SD .221 .475 3 NE .787 .791 3 KS 1.333 1.145 3 MT .191 .608 4 ID .296 .711 4 WY .134 .319 4 CO 2.686 .608 4 NM .842 .673 4 AZ 3.106 .559 4 UT 1.336 .387 4 NV 1.014 .183 4 WA 4.036 .830 4 OR 1.985 .858 4 CA 28.799 .961 4 AK .226 .324 4 HI .836 .272 4 ; proc format; value regfmt 1='Northeast' 2='South' 3='Midwest' 4='West'; run; data _null_; set statepop; by region; pop90=sum(cityp90,ncityp90); file print; put state 1-2 @5 pop90 7.3 ' million'; if first.region then regioncitypop=0; /* new region */ regioncitypop+cityp90; if last.region then do; put // '1990 US CENSUS for ' region regfmt. / 'Total Urban Population: ' regioncitypop' million' _page_; end; run;
1 ME 1.228 million NH 1.109 million VT 0.563 million MA 6.017 million RI 1.003 million CT 3.288 million NY 17.990 million NJ 7.730 million PA 11.882 million 1990 US CENSUS for Northeast Total Urban Population:45.456 million
data _null_;
input idno name $ startwght;
file file-specification print;
put name 1-10 @15 startwght 3.;
if startwght > 200 then
put overprint @15 '___';
datalines;
032 David 180
049 Amelia 145
219 Alan 210
;
put @5 name $8. overprint @5 8*'_' / @20 address;
data _null_; input idno name $ startwght 3.; put name @; if startwght ne . then put @15 startwght; else put; datalines; 032 David 180 049 Amelia 145 126 Monica 219 Alan 210 ;
----+----1----+----2 David 180 Amelia 145 Monica Alan 210
data team; input id team $ score1 score2; if id le 1000 then do; put _infile_; delete; end; datalines; 032 red 180 165 049 yellow 145 124 219 red 210 192 ;
----+----1----+----2 219 red 210 192
data _null_; n=5; nvar1=1; var1=7; put @1 'n' nvar1 'n'; run;
----+----1----+----2 n1 n
put @1 'n'nvar1'n';
----+----1----+----2 5 7 n
put @1 'n' nvar1 +(-1) 'n';
----+----1----+----2 n1n
/* * Use #i and @j to position name and weight information into * four columns in column-major order. That is print down column 1 * first, then print down column 2, etc. * This example highlights the need to specify # before @ because * # sets the column pointer to 1. */ data _null_; file print n=ps notitles header=hd; do i = 1 to 80 by 20; do j = 1 to ceil(num_students/4); set sashelp.class nobs=num_students; put #(j+3) @i name $8. '-' +1 weight 5.1; end; end; stop; hd: put @26 'Student Weight in Pounds' / @26 24*'-'; return; run;
Student Weight in Pounds ------------------------ Alfred - 112.5 James - 83.0 Joyce - 50.5 Robert - 128.0 Alice - 84.0 Jane - 84.5 Judy - 90.0 Ronald - 133.0 Barbara - 98.0 Janet - 112.5 Louise - 77.0 Thomas - 85.0 Carol - 102.5 Jeffrey - 84.0 Mary - 112.0 William - 112.0 Henry - 102.5 John - 99.5 Philip - 150.0