2024年7月1日月曜日

sasで変数の和を計算する話

 同じobsの二個以上の変数の和を求めるときは、sum関数を使うか変数を+で足すかのどちらかです。どちらも似たような処理ですが、書き方で微妙に欠損の取り扱いが違うので注意が必要です。足す変数に欠測が含まれるときはsum関数は欠測を飛ばして足し算して、+で足す時は足し算そのものが行われません。

3157  data _null_ ;
3158  a = 2 ; b = . ; c = a+b ;  putlog c= ; output ;
3159  a = 2 ; b = . ; c = sum(a,b) ; putlog c= ; output ;
3160
3161  run ;

c=.
c=2
NOTE: 欠損値を含んだ計算により、以下の箇所で欠損値が生成されました。
      (回数)(行:カラム)
      1 3158:22
NOTE: DATAステートメント処理(合計処理時間):
      処理時間           0.00 秒
      CPU時間            0.00 秒

出てるlogは読もうね。欠損の処理がめんどくさいしNoteだからと欠損値を含んだ計算…をlogに残したままにするとこの手の結果が変わるやつを見逃すから、この手のはできればlogに残さないようにしてね。
あと誰かのを引き継いだ時に欠損値を含んだ計算…のlogが残っていると何がどうなってるのかの確認を全部しないといけないからね。出来ればlogに残さないようにしてね(憤怒)