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

看板Statistics作者 (銀色的靈魂)時間14年前 (2012/01/29 00:57), 編輯推噓2(202)
留言4則, 2人參與, 最新討論串3/3 (看更多)
※ 引述《bbearh (go)》之銘言: : 又來請教板上大大. : 有關data process 過程, : 本覺得已經懂了. 但是有時結果仍不是我想像的. : 如果可能的話, 幫我解釋這樣寫為什麼不對. : 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 的使用目的是什麼? 覺得自己的觀念還是模糊的. 這裡用 if then ; else if then ; else ; 有點詭異 這樣代表有三種以上的可能 不過 id 要嘛等於 lag(id) 要嘛不等於 只需要 if then ; else ; 即可 另外提供另一種得到相同結果的寫法給你參考 data eee; set ddd; by id; retain acc ; if first.id then acc=vol; else acc=acc+vol; run; -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 111.235.230.125

01/29 10:37, , 1F
用3 個if else 只是想看看到底跑到那個case, 結果真的跑到
01/29 10:37, 1F

01/29 10:39, , 2F
到那個不可能的case. 讓我更不明白了.
01/29 10:39, 2F

01/29 10:42, , 3F
分人分組用first.id 是種簡潔明瞭的寫法...(筆記) THANKS
01/29 10:42, 3F

01/29 11:58, , 4F
sort by id ;記得要先排序
01/29 11:58, 4F
文章代碼(AID): #1F92aEhY (Statistics)
文章代碼(AID): #1F92aEhY (Statistics)