6# mandyshi
这个的确比较麻烦
关于周六周日,记得SAS好像有个关于时间方面的计数的函数,可以跳过周六周日计算,王燕的时间序列中好像有这个函数。具体的一时也想不起来的...
这样的话可以 date_start-date_end>30(因为跳过了周六周日,date_end肯定是间隔了30个交易日的)
或者建立一个全部日期的样本,把原始数据merge进去,在建立一个周的变量(1-7,定义周六周日为1)并将周六周日的收益率赋值为0;
节假日也可建立类似的变量cele=1/0 节日就==1
if cele=1 then n=n-1。
然后可以定义一个drop: if cele=1 or week=1 then drop=1 else=0;
然后可以类似这样:
%let n=0;
%let i=0;
%do %until &n=30;
* 如果下一天不是节假日n=n+1,如果是n=n一直到n=30为止 然后计算i;
&i=%eval(&i+1)
&n=ifn(%eval(&date_start+&i) and week=0, %eval(&n+1),&n);
&date_end=%eval(&date_start+&i);
%end;
n相当于一个计数器,通过n=30得到实际需要的i,这样对每个观测都可以计算得到一个最终的date_end,同时每个观测自己的date就是date_start;可生产这样一个新变量再merge回去。(先生成一个全样本,把实际样本merge进来,最好加个标签变量(flag=1)方便以后导出,然后处理下周六周日和节假日,节假日可能要手工处理,然后计算得到date_end,利用flag=1导出,再merge回去 这样每次计算时只要date_start<date<date_end就行)
一点零散的想法,不知能不能用,仅供参考。