%Get Events

[~,ia,~] = unique([EVT.Permno EVT.Announcementdate], 'rows'); % in case there are multiple events for the same firm-announcement date combination, keep only one.
EVT = EVT(ia,:);     % !!! Be sure that the order of events in EVT is the same as the order of events in the CRSP dataset!

%create COMP
COMP = dataset;


COMP.ACT = NaN(size(EVT.Permno)); COMP.AT = NaN(size(EVT.Permno)); COMP.CH = NaN(size(EVT.Permno)); 
COMP.DLC = NaN(size(EVT.Permno)); COMP.DLTT = NaN(size(EVT.Permno));   


EVT.Anncouncementdate=int32(EVT.Announcementdate);

for i = 1: length(EVT.Permno)
    k =  COMPraw.GvKey == EVT.GvKey(i) & COMPraw.DataDate<=deltadate(EVT.Announcementdate(i),0,-3,0) & COMPraw.DataDate>deltadate(EVT.Announcementdate(i),-1,-3,0);

    if sum(k)==1
        COMP.ACT(i) = COMPraw.CurrentAssetsTotal(k);
        COMP.AT(i)   = COMPraw.AssetsTotal(k);
        COMP.CH(i)   = COMPraw.Cash(k);
        COMP.DLC(i)  = COMPraw.DebtinCurrentLiabilitiesT(k);
        COMP.DLTT(i) = COMPraw.LongTermDebtTotal(k);
        
    end
    clear k
    i/length(EVT.Permno)
end

%% CRSP

% Create Event/Return Matrix

CRSP = dataset;
[eventtmp, ~, CRSPraw.EventID] = unique( [CRSPraw.PERMNO CRSPraw.event_date],'rows');
CRSP.PERMNO = eventtmp(:,1);
CRSP.event_date = eventtmp(:,2);
CRSP.EventID = (1:length(CRSP.PERMNO))';
CRSP.RET=NaN(length(CRSP.EventID),331);
CRSP.vwretd=NaN(length(CRSP.EventID),331);

tic
for id = 1:length(CRSP.EventID)
    crspraw = CRSPraw(CRSPraw.EventID==id,:);
    CRSP.RET(id,:)    = (vlookup( (-300:30)', CRSPraw.TradingDaysRelativetoEven, CRSPraw.Returns))';
    CRSP.vwretd(id,:)    = (vlookup( (-300:30)', CRSPraw.TradingDaysRelativetoEven, CRSPraw.ValueWeightedReturnincldi))';
    id / length(CRSP.EventID)
end
toc

clear id tmp eventtmp crspraw
