余分な文字列を一括して取り除く方法

[OS] ALL
[リリース] ALL
[キーワード] _INFILE_、INPUT

[質問]

DATAステップを用いて外部ファイル等からデータを読み込んでいます。

データに含まれる余分な文字列を取り除くことを考えていますが変数の数や余分な文字列が多い場合、ステートメントの数が増え記述が冗長になってしまいます。

変数の数に依存せず、一括で処理することは可能でしょうか。

[回答]

この場合、_INFILE_自動変数が利用できます。

_INFILE_自動変数にはINFILEステートメントで読み込んだレコード全体が格納されているため、INPUTステートメントで変数に値を格納する前に、一括して処理ができます。

なお、_INFILE_自動変数に値が格納されるのは、INPUTステートメントが実行されたタイミングであるため、ダミーのINPUTステートメントが必要となります。

以下の例では、_INFILE_自動変数にCOMPRESS関数を用いて、あらかじめハイフン('-')を取り除いています。

例)
DATA test;
INFILE DATALINES DLM=',';
/* ダミーのINPUTステートメント */
INPUT @;
_INFILE_=COMPRESS(_INFILE_,'-');
INPUT var1 $ var2 $;
DATALINES;
abc,de-f
g-hi,j-k-l
;

詳細は以下のリンクをご参照ください。

SAS® 9.4 Statements: Reference, Fourth Edition
INFILE Statement (英語)
http://support.sas.com/documentation/cdl/en/lestmtsref/68024/HTML/default/viewer.htm#n1rill4udj0tfun1fvce3j401plo.htm