今回は頻繁に使われる「サブセット化IF」というステートメントについて解説。
IF 条件式 ;
|
- データステップ内で使用します。
- 条件式が成立しない場合、そのオブザベーションに対する残りのプログラムを中止します(そのオブザベーションはデータセットに出力されません)そして即座に次の反復(次のオブザベーションの読み込み)に移行します。
- 条件式が成立する場合、そのオブザベーションに対する残りのプログラムが実行されます。
例①
やってる事
- a = 2 のオブザベーションであれば、以降の処理(変数cを導出)して、out1に出力
- それ以外はそのオブザベーションに対する処理を中止して、out1に出力しない
例②
やってる事
- データステップ内で変数cを導出
- c >= 10 のオブザベーションをout2に出力
- それ以外はそのオブザベーションに対する処理を中止して、out2に出力しない
if 条件で部分一致の式を書きたいのですが、どうすればよろしいでしょうか?
返信削除ifとarrayの式を組み合わせたいのですが・・・・
美香さん、コメントありがとうございます!
削除ご質問としては以下の2つで合ってますか?
①whereのlike演算子のような機能をifに実装させたい
②ifで配列を利用したい
以下にサンプルプログラムを書いてみました。
やりたい事はこんな感じであってるでしょうか?
data have;
input (a b c)(:$50.);
cards;
YES NO たぶんYES
NO YESかも NO
;
data want;
set have;
array ar(*) a b c;
do i=1 to dim(ar);
if kindex(ar(i),"YES")>0 then do;
put ar(i);
end;
end;
run;
ifではlike演算子が使えないので、特定の文字列の位置を返すindex関数(日本語を含む場合はkindex関数)で代用できます。
不明点や的外れな部分がありましたら、ご指摘頂ければと思います。
ちなみにサンプルでやっているのは変数A,B,Cに対して「YES」「たぶんYES」のように「YES」という文字が含まれている場合に、ログに変数値を出力しています。
削除