データから、数値または文字だけを抽出する方法

[OS] ALL
[リリース] SAS System 9以降
[キーワード] extraction, numeric, character, function, COMPRESS

[質問]

文字と数字が混在しているデータがあります。
この中から、文字や数字を取り出す方法はありますか。

[回答]

これまでは、SCAN関数やSUBSTER関数などの利用で、特定の文字を抽出することなどが可能でしたが、SAS9からは、COMPRESS関数に追加された機能を利用することで、簡易に文字・数字のみを取り出すことが可能となりました。

次の例では、COMPRESS関数の3番目の引数に値を保持することを意味する「K」と、数値を表す「D」、および文字(アンダーバーと英字)を表す「F」を組み合わせて指定し、変数内の数値と文字を取り出しています。

COMPRESS関数の構文

  COMPRESS(<source><, chars><, modifiers>) 

説明
source 取り除きたい文字を含むSAS文字式
chars SAS文字式から取り除きたい、1つ以上の文字
modifiers COMPRESSの動作に対する設定

使用例


                                   /* テストデータ作成 */
  DATA sample;
    INPUT data1 $CHAR15.;
  DATALINES;
  2006 01 08 aaaaa
  bbbb 2006-01-09
  2006/01/10 cc
  ;
  RUN;

  DATA ext;
    SET sample;
                                       /* KD 数値を残す */
    rc1 = COMPRESS(data1,,'KD');            
                                       /* KF 文字を残す */
    rc2 = COMPRESS(data1,,'KF'); 
  RUN;

  PROC PRINT DATA=ext (KEEP=rc1 rc2);
  RUN;

上記の使用例を実行すると、結果は以下のようになります。


    OBS      rc1       rc2
    1     20060108    aaaa
    2     20060109    bbbb
    3     20060110    cc

COMPRESS関数の詳細は、以下のURLやオンライヘルプなどからご参照ください。

  • http://support.sas.com/onlinedoc/913/docMainpage.jsp
  • SAS OnlineDoc → Base SAS → SAS Language Reference: Dictionary → Dictionary of Language Elements → Functions and CALL Routines → COMPRESS Funtion

なお、COMPRESS関数の拡張は全角文字に対応していません。また、KCOMPRESS関数には機能の追加はありません。