2018年4月26日木曜日

NOT演算子で条件の否定をする




突然ですがうなぎと梅干しは食べ合わせが悪いって子供のころ聞いたことありますよね。
けど最近はそんな事ないって言われてますね、実際どうなのか調べてないんでわからないけど。


てことで、以下にとある人の3日間の晩御飯のデータがあったとします。

data DT1;
input DT:yymmdd10. FOOD1:$20. FOOD2:$20.;
format DT yymmdd10.;
cards;
2018/04/05 うなぎ  たくあん
2018/04/06 ラーメン  味噌汁
2018/04/07 うなぎ  梅干し
;
  DT 
  FOOD1  
  FOOD2  
 2018/04/05   うなぎ  たくあん 
 2018/04/06   ラーメン  味噌汁
 2018/04/07   うなぎ  梅干し



FOOD1にはメインとなる食べ物で、FOOD2には漬物とかおまけ的な食べ物が入力されているとします。
ここで食べ合わせが問題ないと思われるレコードのみを抽出したいとします。
つまり「うなぎと梅干しを一緒に食べたレコード以外」を抽出します。



NOT演算子を使えばこんな感じで分かり易いですが、、

data DT2;
  set DT1;
  where not (FOOD1="うなぎ" and FOOD2="梅干し");
run;
  DT 
  FOOD1  
  FOOD2  
 2018/04/05   うなぎ  たくあん 
 2018/04/06   ラーメン  味噌汁


使わないとちょっと分かりにくい感じになってしまいます。

data DT2;
  set DT1;
  where FOOD1^="うなぎ" or FOOD2^="梅干し";
run;
  DT 
  FOOD1  
  FOOD2  
 2018/04/05   うなぎ  たくあん 
 2018/04/06   ラーメン  味噌汁



SAS初心者で、このNOT演算子の書き方を知らずに、分かりにくい方の書き方してる人がたまにいます。

NOT ( 条件 )」という感じで否定したい条件をカッコで囲ってNOTをつけてあげるだけです。「^( 条件 )」という書き方も出来ます。

0 件のコメント:

コメントを投稿