以下のようなテキストファイルがあったとします。
C:\TEST.txt
SAS boubi roku I'm a.matsu |
このファイルを読み込んで以下のデータセットを作りたいとする。
TEXT
|
---|
SAS boubi roku |
I'm a.matsu |
data DT1;
length TEXT $2000.; infile "C:\TEST.txt" lrecl=32767; input TEXT; run;
|
テキスト中の半角スペース(空白)が区切り文字として解釈されるので文字が切れてしまいます。
(注意事項を追記したので、記事の最後までご覧ください)
data DT2;
length TEXT $2000.; infile "C:\TEST.txt" lrecl=32767; input ; TEXT = _infile_; run;
|
infile "C:\TEST.txt" lrecl=32767; |
まず読込むテキストファイルを指定。
また「LRECL=」で1レコードに読み込める最大バイト数を指定しています。この設定値が小さいと文字切れの原因になるので、例では最大設定値(環境によって異なる可能性あり)の「32767」を設定。
それと、LENGTHも32767にしてしまうと、ファイルサイズが大きくなってしまうので、実データにあわせた長さに適宜設定します。
input; |
テキストファイルを1レコード読み込みに行きます。
ただしINPUTの後に変数の指定がないので、変数への出力はしません。
TEXT = _infile_; |
自動変数「_INFILE_」には入力バッファの内容が格納されています。
この文字を変数TEXTに代入すれば出来上がりです。
📝注意
テキストファイルで「先頭に半角スペースを含むレコード」がある場合は注意。
「今回の方法で変数に読み込んだら先頭の半角スペースが消えてしまった」とご報告頂きました。
私のほうでテストしたところ、問題なくスペースを保持することが出来ましたが、環境依存の可能性もあるので、各自の環境で挙動確認したほうが良さそうです。
ちなみに、ご報告頂いた内容とは別件かもですが、変数値の先頭に半角スペースがあっても、表示上、スペースが消えてみえることがあります。
例えばPROC PRINTで変数値を表示すると先頭の半角スペースが消えてみえます。
実際の格納値と異なるため、混乱のもとになりがちです。
関連記事
「input &」で空白を含むテキストを1変数に読み込む
0 件のコメント:
コメントを投稿