覚えたら絶対役に立つCOALESCE関数を紹介。
| COALESCE関数( 引数1 , 引数2 ・・・ ) | 
この関数は引数のうち最初に欠損値以外で登場する値を返してくれる。
引数が全て数値の場合「COALESCE」、全て文字の場合「COALESCEC」と使い分ける必要がある。
それではどんな時使えるのか、簡単な例を示します。
サンプルデータ
| 
data DT1; length YN 8. A B C $10.; input YN A$ B$ C$; cards; 0 . aa bb 1 . . cc . . . . ; run; 
 | 
サンプルデータに、有無変数YN 「0:なし、1:あり」 があります。
この変数が欠損値だったら 「99:不明」 と置き換えた変数YN2を作りたいとします。| 
  YN    | 
  YN2    | 
|---|---|
| 0 | 0 | 
| 1 | 1 | 
| . | 99 | 
通常以下のように書きますが、、
| 
data OUT1; set DT1; if YN^=. then YN2 = YN; else YN2 = 99; keep YN YN2; run; | 
COALESCE関数を使えば、一発です。
| 
data OUT2; set DT1; YN2 = coalesce( YN, 99 ); keep YN YN2; run; | 
以下のロジックで変数Xを導出したいとします。
・ Aに値があれば X =  A
・ 上記以外で、Bに値があれば X = B
・ 上記以外で、Cに値があれば X = C
・ 上記以外(すべて欠損値)なら X = "XXX"
| 
  A   | 
  B    | 
  C    | 
  X   | 
|---|---|---|---|
| aa | bb | aa | |
| cc | cc | ||
| XXX | 
通常以下のような書き方になりますが、、
| 
data OUT3; set DT1; length X $10.; if A^="" then X = A; else if B^="" then X = B; else if C^="" then X = C; else X = "XXX"; keep A B C X; run; | 
これも一発で書けます。
| 
data OUT4; set DT1; length X $10.; X = coalescec( A, B, C, "XXX" ); keep A B C X; run; | 
他にも以下のような使い方など、工夫次第で色々な使い方ができる超便利な関数です。
変数指定は「V100-V1」のように逆にもできる。
 
0 件のコメント:
コメントを投稿