推理詰めSAS②coalesce関数の戻り値が元データにない??

推理詰めSAS2回目です。

【1回目 似て非なるもの】
http://sas-tumesas.blogspot.jp/2013/12/sas.html

また今回も僕とYさんの会話から、一体Yさんが、どんな処理をしているのかを推理し、その上で解決法までを答えてください。

Yさん
すみません、前に教えてもらったcoalesce関数を使って、X,Y,Zっていう3つの変数があるデータセットに対して、X,Y,Zを順番にみて、最初の非欠損値を取得する処理を書いたんですが、、、


「エラーになった?」

Yさん
いえ、エラーにはなりませんでした。WARNINGもでませんでした。だけど、結果をみるとXにもYにもZにも存在しない値が返されてくるんです。XにもYにもZも0から3までしたとらない変数なのに戻り値が4とかになるんです。


「どんな風に書いたの」

Yさん
「以前教えてもらった、ハイフンを2つ並べて変数の格納順に一括指定する方法をつかいました


以上。
さて、Yさんは一体どんなコードを書いてしまったのでしょうか?どのように直せば正常に実行できるでしょうか?








【答え】
今回は、簡単でしたね。
次に僕の言うセリフはこうですね。

「ofつけてないでしょ!!」


つまり、

data Q1;
X=1;Y=.;Z=3;output;
X=.;Y=2;Z=3;output;
X=.;Y=.;Z=3;output;
run;







こういうデータに対して

data A0;
set Q1;
 A=coalesce(X--Z);
run;

こう書いちゃったんですね。








X--ZはX+Zと同じ意味になります。ハイフンがマイナスの意味なるんですね。
マイナスのマイナスはプラスだからXとYを足した一つの値に対してcoalesceをかけています。
これは全く意味のない処理ですが、文法的なエラーではありません。

ただしくは

data A1;
set Q1;
 A=coalesce(of X--Z);
run;

と書いて






でした。

あと一歩、惜しかったねYさん。







2 件のコメント:

  1. いつも一歩進んだ解説ありがとうございます。私のブログにリンク貼らせて頂きました。これからもよろしくお願いします。

    返信削除
  2. リンク有難うございます!こちらからも貼らせていただきました!僕の解説は全然いい加減でまだまだですが、精進します。これからも宜しくお願いします。ブログ楽しみにしています!

    返信削除