2014年3月13日木曜日

1行プログラムその1:「1→2」「2→1」のような値変換


数行を要するようなプログラムを1行におさめる事を意識した小技や基本技を紹介したいと思います。

まずは初歩的なものから。
コードやスコアなどの値を以下のように逆転させたいことがあります。
1 → 3
2 → 2
3 → 1

サンプルデータ

data DT1;
input V1;
cards;
1
3
2
;
run;

データセットDT1
V1
 1
 3
 2

求めたい結果
V1  V2
 1    3
 3    1
 2    2



1行で書く方法。

まじめに書くとこんな感じですが、
data DT2;
   set DT1;
   if  V1 = 1 then  V2 = 3 ;
   if  V1 = 2 then  V2 = 2 ;
   if  V1 = 3 then  V2 = 1 ;
run;


以下の式を当てはめて書くと1文でいけます。
(開始値 + 終了値) - 変数値

サンプルの場合、「1~3」の範囲の値なので、当てはめると「(1 + 3) - V1」となります。
data DT2;
   set DT1;
   V2 = 4 - V1 ;
run;

0 件のコメント:

コメントを投稿