Re: [程式] SAS retain分組執行

看板Statistics作者 (謠指部總司令)時間9年前 (2015/04/02 06:29), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/2 (看更多)
※ 引述《faceoflove56 (1234567)》之銘言: : [軟體程式類別]: : SAS : [程式問題]: : 資料處理 : [軟體熟悉度]: : 低(1~3個月) : [問題敘述]: : 原始資料 : ID ACCEXP << Dummy r.v. : 1 0 : 1 0 : 1 1 : 1 0 : 1 0 : 2 1 : 2 0 : 2 0 : 2 1 : 想變成 : -----------table test----------- : ID ACCEXP : 1 0 : 1 0 : 1 1 : 1 '1' : 1 '1' : 2 1 : 2 '1' : 2 '1' : 2 1 : 只要ACCEXP出現1,那麼該ID接下來的ACCEXP都要變成1 : (ACCEXP是有無會計經驗,原始資料是依據當年職位來判斷ACCEXP是否為1 : 但"經驗"應該是有做過就有經驗,故資料需做調整) : 我的想法是設變數b,如果ACCEXP=1,那b=1, : 因為b會retain,接下來只要做ACCEXP=b即可 : 目前問題在於ID有很多筆,從遇到第一個ACCEXP=1時b就一直為1 : 我希望每個ID都是從0開始,遇到第一個ACCEXP再變成1(也就是一個ID做一次) : [程式範例]: : proc sort data=mylib.a; : by director_ID year; : quit; : data test; : set mylib.ceo; : retain b 0; : if ACCEXP=1 then b=ACCEXP; : by director_ID; : run; : ----------------------------------------------------------------------------- : 感謝~ : 另外想請教有無前輩做過CAR(cumulative abnormal return) : 因為做CAR要抓t=-1,0,1的資料,t=-1我用LAG做,但t=1是下一筆 : 不知是否有方法取得下一筆資料(CAR完全無頭緒>"<,感謝各位幫忙!!) data step裡面需要一些小處理 假設資料存成temp 則程式可寫成: data temp; set temp; by id; /*有這行才能分層retain*/ if first.accexp then b = 0; /*造一個暫時的變數b來存accexp累加結果*/ b+accexp; /*開始分層累加*/ if b > 0 then accexp = 1; /*b>0表示之前一定有至少一個accexp=1, 所以相對應的accexp=0改成1*/ drop b; /*b已經沒有利用價值惹,砍了吧*/ run; CAR我只會conditional autoregressive的分析 什麼cumulative abnormal return是從來沒有聽過 幫不上忙~ -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 139.52.242.104 ※ 文章網址: https://www.ptt.cc/bbs/Statistics/M.1427927343.A.ADA.html
文章代碼(AID): #1L774lhQ (Statistics)
文章代碼(AID): #1L774lhQ (Statistics)