2017-12-15 35 views
0

나는 이벤트 스터디를 진행 중이며 비정상적인 수익을 내기 위해 평균 수익 값이 필요합니다. 내 벤치 마크 창은 [-60, -11]이고 이벤트 창은 [-5, -1]이며 발표 날짜는 0입니다. 그러나 벤치 마크 및 이벤트 창을 오염시킬 수있는 몇 가지 공지 사항이 있습니다. 벤치마킹 창에 알림이있는 경우 벤치 마크 창의 50 일을 그대로 유지하고 싶습니다. 따라서 벤치 마크 창에 공지 사항이 있으면이 날을 삭제하고 1을 창을 확장하십시오.SAS : 조건이있는 이벤트 스터디 창

지금은 proc 확장으로 평균을 생성합니다.

proc expand; by stock; 
convert logreturn = avg_logreturn/METHOD = none TRANSFORMOUT = (movave 60 lag 11); 

실행;

그런 다음 실제 수익에서 평균을 차감합니다.

내 데이터 세트 (데이터의 10 년)과 같습니다

는 기본적으로 각 발표는 내가의 평균을 계산 -11 -60의 창을 필요로 등

Stock Date  Return Announcement 
AAA 01/01/10 0.05 
AAA 02/01/10 0.04 
AAA 03/01/10 -0.02  03/01/10  this one should be deleted as is spoils the coming announcement but still be counted as an announcement 
AAA 04/01/10 0.01 
AAA 05/01/10 -0.03  
AAA 06/01/10 0.05 
AAA 07/01/10 0.04 
AAA 08/01/10 -0.02  08/01/10 
AAA 09/01/10 0.01 
AAA 10/01/10 -0.03 
AAB 01/01/10 0.01 

. 길이는 동일하게 유지되어야하지만 항상이 창에 발표가있을 경우 평균은 계산되지 않아야합니다.

아이디어는 간단하지만 실현이 compliacted 것 같다 ...

+0

지금까지 해보신 것은 무엇입니까? – user667489

+0

Proc 확장은 관찰 할 수 없으므로 작동하지 않습니다. 나는 제대로 할 수있는 방법을 생각할 수 없다. – MaBo88

답변

0

전 공정 데이터가 확장 될 수 있습니다.

  • PROC 확장 날짜를 발췌 제외하는 뷰를 생성합니다
  • 를 살 처분해야 할 주식/날짜를 찾기

샘플 코드 :

data have; 
    attrib 
    stock length=$3 
    date length=4 format=date9. informat=mmddyy8. 
    return length=8 format=6.2 
    announcement length=4 format=date9. informat=mmddyy8. 
    ; 
    infile cards missover; 
    input stock date return announcement; 
datalines; 
AAA 01/01/10 0.05 
AAA 02/01/10 0.04 
AAA 03/01/10 -0.02  03/01/10  this one should be deleted as is spoils the coming announcement but still be counted as an announcement 
AAA 04/01/10 0.01 
AAA 05/01/10 -0.03 
AAA 06/01/10 0.05 
AAA 07/01/10 0.04 
AAA 08/01/10 -0.02  08/01/10 
AAA 09/01/10 0.01 
AAA 10/01/10 -0.03 
AAB 01/01/10 0.01 
run; 

%let CULL_GAP_LE_CRITERIA = 5 ; 

data cull(keep=stock cull_date); 
    set have; 
    by stock date; 

    retain cull_date; 

    if first.stock then cull_date = .; 

    if announcement then do; 
    if cull_date then do; 
     gap = intck('month', cull_date, announcement); 
     if gap <= &CULL_GAP_LE_CRITERIA then 
     OUTPUT; 
    end; 

    cull_date = announcement; * setup for culling this announcement as well; 
    put cull_date=; 
    end; 
run; 

data DATA_FOR_EXPAND/view=DATA_FOR_EXPAND; 
    merge 
    have 
    cull(rename=cull_date=date in=culled) 
    ; 
    by stock date; 
    if not culled; 
run; 

if not culled하여 제거합니다 추려 진 줄. 나는 당신이 창문이 1 씩 증가한다고 말했기 때문에 이것은 적절하다고 생각합니다.

압연 창문에 추려 진 날짜가 사용되기를 원한다면 피클이 약간 있습니다.

+0

로버트에게 감사드립니다. 괜찮아. 어떤 진술을 생각하십니까? 내 확장 기능은 단순히 이동 평균을 사용합니다. – MaBo88