为月初MATLAB创建虚拟变量

时间:2015-04-04 15:06:29

标签: matlab dummy-data

我每天关闭一个索引的值,我想在每个月的最后一天之前和之后的特定天数创建虚拟变量。

说4天前和4天后。共9天。我有23年的数据。

事情是这些月份的长度不一样(显然),数据不包括所有周末(使得不等长度更长,#34;不等等")。

如何以有效的方式为数据创建虚拟变量,而无需手动浏览超过6000个观察点,以及在该月的最后一天之前4天和4天后确定点日期?

%------------------------

我设法创建了一个包含日期和表格的表格,从1991年到2014年不包括周末。第一列,第二个月,第三天和第四个回报:

enter image description here

现在,我想在月份的最后一个工作日之前的X天创建虚拟变量,并在该月的最后一天之后创建X天。说9天。所以假人D-9,D-8 ...... T,D + 1,D + 2 ...... D + 9。 T =该月的最后一天。总计19个假人。其余时间将有一个单独的虚拟ROM。然后我在回报中使用这些作为回归量。

enter image description here

我的预期结果将是所有虚拟对象的系数,这些虚拟对象描述了每个月中每个选定日期(月初的19天)和当月剩余时间(ROM)的回报。看起来应该是这样的:

enter image description here

@Daniel

Complete data for my indices is found here

1 个答案:

答案 0 :(得分:1)

%shorter period for demonstration purposes
startday = datenum(2015,1,1);
endday = datenum(2015,3,1);
%just make sure our calendar contains enough data so every interesting day is included
startday=startday-27;
endday=endday+27;
alldays=startday:endday;
alldaysvec=datevec(alldays);
%logical vector which is true for mon-friday. Might be updated to reflect holidays as well
workday=weekday(alldays)<=6&weekday(alldays)>=2;
%create a calendar with only the bussines days in it:
wdays=alldaysvec(workday,:);
%identify days where month is changed
closing_days=find(diff(wdays(:,2))~=0);
%closing days
wdays(closing_days,:)
%days three bussines days after the closing days
wdays(closing_days+3,:)