[程式] SAS IF/ELSE RETAIN 觀念問題

看板Statistics作者 (go)時間14年前 (2012/01/29 00:01), 編輯推噓0(004)
留言4則, 2人參與, 最新討論串1/3 (看更多)
又來請教板上大大. 有關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

01/29 00:20, , 1F
試著先在一個data step 把lag(id)存成另一個variable
01/29 00:20, 1F

01/29 00:22, , 2F
這樣在用你的邏輯,就會對了!! 你可以用PDV來看為什麼錯
01/29 00:22, 2F

01/29 00:24, , 3F
每一個if後面 put _all_ 會幫助你看到data step是怎麼運作
01/29 00:24, 3F

01/29 11:10, , 4F
有指令可以show當時的 pdv嗎? THANKS
01/29 11:10, 4F
文章代碼(AID): #1F91ldNC (Statistics)
文章代碼(AID): #1F91ldNC (Statistics)