-
-
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.
|