コロンモディファイヤを使用したワードパターンの作成

[OS] ALL
[リリース] ALL
[キーワード] Base, DATA, SUBSET IF, COLON MODIFIER

[質問]

条件文を使用して、文字列中の1文字目に特定の値が入っていた場合にのみ、そのオブザベーションを抽出するという処理を考えています。
WHEREステートメントでLIKE演算子を使用すれば可能ですが、入力データがSASデータセットである必要があります。読み込むファイルがブランク区切りやカンマ区切り(CSV)ファイルの場合、どのようにプログラムを記述すれば良いのでしょうか?

[回答]

入力データセットがSASデータセットであれば、WHEREステートメントとLIKE演算子を併用することで、文字列を抽出するためのワードパターンを作成することが可能です。
下記の例は、変数stringに含まれる文字列の値が、「B」で始まるオブザベーションのみ抽出されます

WHERE string LIKE "B%";

しかし、入力データがブランク区切りやカンマ区切りなどである場合、WHEREステートメントは使用できません。このようなときは、サブセット化IFステートメントでSUBSTR関数、またはKSUBSTR関数を使用する方法が考えられますが、「コロンモディファイヤ」を使用する方がより簡便です。
なお、コロンモディファイヤは前方一致のみに対応し、中間一致や後方一致には対応していません。次ページに、変数hanteiの値が「不」から始まるオブザベーションのみを抽出するサンプルプログラムを示します。

data test;
  input kamoku $ hantei $;
  *if KSUBSTR(hantei,1,1)="不";  /* KSUBSTR関数を使用する場合の記述*/
  if hantei = :"不";           /* コロンモディファイヤを使用する場合の記述*/
cards;
英語 合格
国語 合格
数学 合格
理科 不合格
社会 合格
;
run;

proc print data=test noobs;
run;
上記サンプルプログラムの出力結果は、下記のようになります。
kamoku   hantei 
理科      不合格