我在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;
答案 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;