推理詰め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さん。
いつも一歩進んだ解説ありがとうございます。私のブログにリンク貼らせて頂きました。これからもよろしくお願いします。
返信削除リンク有難うございます!こちらからも貼らせていただきました!僕の解説は全然いい加減でまだまだですが、精進します。これからも宜しくお願いします。ブログ楽しみにしています!
返信削除