以下のテキストファイルを読み込みたいとします。
C:\test\test.txt
0 . 1 a 2 b 3 c |
*** 例①:失敗例 *****;
data TEST; length X 8. Y $3.; infile "C:\test\test.txt" truncover; input X 1-1 Y 3-5; run;
|
文字変数Yには、テキストファイルの中身通り、先頭の半角スペースを保持して以下のように読み込みたかったのですが、ふつうに読み込むとこの半角スペースは消えちゃいます。
X
|
Y
|
---|---|
0 | |
1 | a |
2 | b |
3 | c |
先頭の半角スペースを保持するには、以下のような工夫が必要です。
(後述しますが、文字欠損値の取り扱いだけ注意が必要)
*** 例② *****; data TEST; length X 8. Y $3.; infile "C:\test\test.txt" truncover; input @1 X
@3 Y $char3. ;run;
|
「INPUT @読み込み開始位置 変数名 $CHAR読み込む文字の長さ.」という感じで書きます。
- 「@読み込み開始位置」で変数毎に読み込みを開始する位置を指定し、
- インフォーマット「$CHAR」を使って先頭の半角スペースを切り捨てずに読み込んでいます
- 「$CHAR」は文字変数として読み込むときに使います。上の例の変数Xは数値変数として読み込みたいので「$CHAR」は指定していません
注意
- 文字欠損値の取り扱いだけ注意
- 最初の例(例①)では、テキストファイルの1行目のドット「.」は欠損値として扱われて文字変数Yに読み込まれましたが、
- 今回の例(例②)では、$CHARを使ったことで、テキストファイルの1行目のドット「.」がそのまま「.」という文字値として文字変数Yに読み込まれました。
その他の補足
今回の例で使用している「TRUNCOVERオプション」について知りたい方は、以下記事の最後らへんで解説しています。
0 件のコメント:
コメントを投稿