WHEREステートメントを使用した特殊文字を含む値の抽出

[OS] ALL
[リリース] ALL
[キーワード] BASE, WHERE, LIKE, ESCAPE CHARACTER

[質問]

WHEREステートメントのLIKE演算子を使用して、特殊記号である「%」で始まる文字列の含まれるオブザベーションを抽出したい場合、どうすればよいでしょうか。

[回答]

残念ながら、DATAステップでのWHEREステートメントでは、特殊文字のエスケープは対応できません。
ただし別の方法として、以下の2つの方法があります。

1)SQLプロシジャを用いる方法
SQLのWHERE句でLIKE演算子を指定する際に、ESCAPEオプションを利用すれば、特殊文字をエスケープできます。

2)DATAステップを用いる方法
DATAステップでのWHEREステートメントを使用する場合、特殊文字をエスケープできないため、「%」とそれに続く文字列を、それぞれ別の文字列として検索・抽出する必要があります。

下記のプログラム例は、上記の2通りの方法で、変数Xの中から「%」で始まり「d」で終わる5文字の値を持つオブザベーションを抽出します。


                                    /* サンプルデータセット作成 */
DATA sample;
  INPUT x $;
CARDS;
%abcd
aabcd
abbcd
;
RUN;
                                 /* 1) SQLプロシジャを用いる方法 */
PROC SQL;
  CREATE TABLE result AS
  SELECT * FROM sample
    WHERE x LIKE '\%___d' ESCAPE '\';
QUIT;
                                  /* 2) DATAステップを用いる方法 */
DATA result;
  SET sample;
  WHERE SUBSTR(x,1,1)='%' AND x LIKE '____d';
RUN;