Re: [程式] SAS 前後期比較

看板Statistics作者 (焦了六年變脆了)時間16年前 (2009/12/06 17:59), 編輯推噓2(203)
留言5則, 2人參與, 最新討論串4/4 (看更多)
retain temp flag; if _n_=1 then do; temp=p; flag=0; t=-1; end; else if flag=0 then do; if p=temp then t=-1; else do; flag=1; if p>temp then t=1; else t=0; temp=p; end; end; else do; if p>temp then t=1; else t=0; temp=p; end; run; ※ 引述《RequiemInDm (安魂曲)》之銘言: : : 依照t大寫法 : : Obs P t : : 1 2 -1 : : 2 2 -1 : : 3 2 -1 : : 4 5 1 : : 5 1 0 : : 6 3 1 : : 7 2 -1 : : 8 3 1 : : 第7項就會被判斷成-1 而不是0 想問一下 有可以選擇從P的哪個資料點開始做判斷 : : 的方法嘛? 感謝回答 : 以下是我自己寫出問題要的答案 (感謝k大跟t大之前推文), : 只是我在想應該有更簡潔方式寫法才是, 因為用c語言寫判斷式似乎不需要用那麼多! : retain d 0 n 0; : lagp = lag(p); : lag2p = lag2(p); : if _n_ =1 then d = p; : if (p = d ) then do; : if n =0 then t = .; : else goto pp; : end; : pp: : else do; : n+1; : if p > lagp then t=1; : else if p = lag2p then do; : if lagp > lag2p then t =1; : else t =0; : end; : else t =0; : end; -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.36.114.180

12/06 22:36, , 1F
感謝感謝!!不會用到lag會比較快!! 感謝分享
12/06 22:36, 1F

12/06 22:45, , 2F
不過這裡只考慮到落後一期, 要落後兩期可能還要改寫
12/06 22:45, 2F

12/06 22:45, , 3F
還是很感謝
12/06 22:45, 3F

12/06 23:11, , 4F
落後兩期就多塞一個temp2然後判斷邏輯修一下就好了
12/06 23:11, 4F

12/06 23:19, , 5F
是呀 我了解!!哈 感謝我已經修好了
12/06 23:19, 5F
文章代碼(AID): #1B6u2UgM (Statistics)
文章代碼(AID): #1B6u2UgM (Statistics)