在SAS中将每日数据转换为每周数据

时间:2019-03-18 13:05:10

标签: sas

我在SAS中获得行业投资组合的每日收益。

我想计算每周收益。

每日收益是以百分比表示的,所以我认为这应该只是每周收益的总和。

我要面对的明显问题是周中的天数可以不同。

我在SAS中拥有的表具有以下格式:

INDUSTRY_NUMBER DATE DAILY_RETURN 

任何帮助将不胜感激。

我已经尝试过:

proc expand data=Day_result
out=Week_result from=day to=week;
Industry_Number Trading_Date;
convert Value_weighted_return / method=aggregate observed=total;
run;

当我删除第四行即

时,每日数据在Day_Result
proc expand data=Day_result
out=Week_result from=day to=week;
convert Value_weighted_return / method=aggregate observed=total;
run;

此方法的工作方式与我想要的一样,但它并未针对每个类别都针对整个表进行。

因此,如果我有40个类别,我希望每个类别的每周收益。

第二组代码提供每个类别的每周收益。

示例数据:

data have;
    format trading_date date9.;
    infile datalines dlm=',';
    input trading_date:ddmmyy10. industry_number value_weighted_return;
    datalines;
19/01/2000,1, -0.008
20/01/2000,1, 0.008
23/01/2000,1, 0.008
24/01/2000,1, -0.007
25/01/2000,1, -0.009
26/01/2000,1, 0.008
27/01/2000,1, -0.008
30/01/2000,1, 0.003
31/01/2000,1, -0.001
01/02/2000,1, 0.004
02/02/2000,2, -0.008
03/02/2000,2, -0.005
06/02/2000,2, -0.004
07/02/2000,2, -0.009
08/02/2000,2, 0.002
09/02/2000,2, 0.006
10/02/2000,2, 0.008
13/02/2000,2, 0.008
14/02/2000,2, 0.002
15/02/2000,2, 0.01
16/02/2000,2, -0.008
;
run;

1 个答案:

答案 0 :(得分:0)

将数据按INDUSTRY_NUMBER Trading_Date排序,将INDUSTRY_NUMBER用作分组,并标识您的时间变量。

proc sort data=have;
    by industry_number trading_date;
run;

接下来,将您的数据转换为时间序列,以消除任何时间间隔。将所有缺少的天数设置为以前的值,因为在那些交易日(例如,周末,银行假期等)它不会更改。

proc timeseries data=have
                out=have_ts;
    by industry_number;
    id trading_date interval=day 
                    setmissing=previous
                    accumulate=average
    ;

    var value_weighted_return;
run;

最后,获取时间序列输出并将其每天转换为一周。由于您正在使用权重,因此可能要使用average而不是total

proc expand data=have_ts
            out=have_ts_week
            from=day
            to=week
    ;
    by industry_number;
    id trading_date;

    convert Value_weighted_return / method=aggregate observed=average;
run;