作者bbearh (go)
看板Statistics
標題[程式] SAS IF/ELSE RETAIN 觀念問題
時間Sun Jan 29 00:01:40 2012
又來請教板上大大.
有關data process 過程,
本覺得已經懂了. 但是有時結果仍不是我想像的.
如果可能的話, 幫我解釋這樣寫為什麼不對.
data ddd;
input id name$ vol ;
cards;
1 A 10
1 A 12
1 A 9
1 A 3
2 B 4
2 B 5
2 B 6
2 B 7
8 C 1
8 C 1
8 C 1
;
run;
*算分組累積和;
data eee;
set ddd;
retain acc 0;
* acc=-10000;
if id^=lag(id) then do;
acc=vol;
end;
else if id=lag(id) then
acc=acc+vol;
else
acc=-999; <--- 第2 row 為何會跑到這case
run;
* if else then do end 這樣寫沒錯吧! 已被data弄得沒什麼信心
* retain 的使用目的是什麼? 覺得自己的觀念還是模糊的.
---------------------------------
此程式的結果 希望的結果
1 A 10 10 10
1 A 12 -999 22
1 A 9 -990 31
1 A 3 -987 34
2 B 4 4 4
2 B 5 -999 9
2 B 6 -993 15
2 B 7 -986 23
8 C 1 1 1
8 C 1 -999 2
8 C 1 -998 3
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 123.204.207.72
→ majora:試著先在一個data step 把lag(id)存成另一個variable 01/29 00:20
→ majora:這樣在用你的邏輯,就會對了!! 你可以用PDV來看為什麼錯 01/29 00:22
→ majora:每一個if後面 put _all_ 會幫助你看到data step是怎麼運作 01/29 00:24
→ bbearh:有指令可以show當時的 pdv嗎? THANKS 01/29 11:10