COMPRESS関数(改行コードの詰め方)

 COMPRESS(X1,X2)

 「X1」を対象に、「X2」が含まれていれば、「X2」を除いて出力する。
 スペースを除く時に多用している。

例1:COMPRESS('123454321','2')

 「123454321」から「2」を除き、「1345431」となる。

 その他、こんなのもある。
 ↓のようなSASデータセット「WK01」があったとする。
ID COL1(文字列とする)
行1 1 Y1
行2 2 Y22

 この時、以下のPGを実行すると、下記のSASデータセットが作成される。

DATA WK02;
SET WK01;
IF LENGTH(COL1)=2 THEN COL2=COMPRESS("00" || COL1);
IF LENGTH(COL1)=3 THEN COL2=COMPRESS("0" || COL1);
RUN;
ID COL1 COL2
行1 1 Y1 00Y1
行2 2 Y22 0Y22

 ACCESSやらEXCELからSASに取り込んだ時に、
改行コード(ALT+ENTER)が入り込んでいるケースがある。
 一般的に改行コードといえば、次の2つのいずれかをいうらしい。

'0A'X
'0D'X

 アプリケーションでどちらが用いられているのかはっきりしないので、
両方取り除いてしまえばひとまず改行コードは取り除ける。
 だから、改行コードが入っているフィールド(以下ではFIELD1)について
改行コードを取り除くには、↓こうするといい。

COMPRESS(COMPRESS(FIELD,"'0A'"X),"'0D'"X)
COMPRESS(FIELD1,'0A'X || '0D'X )

(追伸)
 Kさんからアイデアをもらいました。ありがとう

(余談)
 検索でcompressがあったので、念のため。
 v9でcompressオプションを指定できるようになったらしい。

option compress = yes ;

 で、処理中にデータセットを勝手に圧縮、解凍してくれるようだ。
 この処理を行うと容量は食わないが、時間を食う(らしい)。
 どの程度の差なのかは試してない。データとPC次第であろう。
 少なくとも、データ量が少ない時は使うべきではない。

05APR2008 update.