Re: [程式] SAS retain分組執行
※ 引述《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
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):