月排名股票收益
6视图(30天)
显示旧的评论
我有一个表为每个公司股票收益在美国,每个月从2000 - 2019。每个月都有大约3000家公司(和预测回报)。我想这些预测返回到十十分位数,等分1有每个月10%的预期回报率最高(90),等等所以等分10 10%的预期回报率最低月(第十百分位)。我试着使离散但这个函数一起排在整个表,而不是月。最后,我希望能够把所有等分1实际返回到一个表,等分2返回到另一个表,然后找到每个月的平均回报率,在每一个等分。我知道我可以使用groupsummary这样做,但我需要首先得到十分位数分配。任何建议吗?谢谢。
我附加样本数据,我相信是我的表的结构。我把我的表和随机部分放在一起。原始表长700 k +行。我需要等级由“tp”(预测返回),最后我希望找到平均每月“仓促”(实际返回)各等分。谢谢!
答案(2)
桑托什命中注定
2023年5月18日
嗨Syabil,
我知道你想在MATLAB处理数据在表格格式。
请参考下面的代码片段,它能够帮助您理解如何从表中提取行利益变量。
负载(“sampledata.mat”);
originalTable = sampledata;
%排序表按年+月新表,并将其分配给变量。
[sortedValues, sortingIndices] =排序(originalTable.dates,“提升”);
updatedTable = originalTable (sortingIndices:);
%找到独特的日期从更新表。
uniqueDates =独特(updatedTable.dates);
%循环遍历每一个独特的日期和处理数据。
为idx = 1:长度(uniqueDates)
%根据选择行
易被诱惑的= updatedTable (updatedTable。日期= = uniqueDates (idx):);
%从易被诱惑的写下你的逻辑来处理数据
结束
在for循环,您可以添加逻辑处理来自原始表中提取数据。
Eric Sofen
2023年6月5日20:10
首先,让你的日期到datetime而不是YYYYMM翻倍!
然后,您可以使用groupsummary组数据按月做上面的离散化。棘手的是,每个月似乎有不同的公司数量,所以输出的大小从每月不等。为了解决这一问题,我们包装在一个单元的输出。然后,对于任何给定的月,如果你想要公司数字对应的分位数,你得指数回列表…
负载sampledata.mat
sampledata。日期= datetime(字符串(sampledata.dates), InputFormat =“yyyymm”);
头(sampledata)
pctlFun = @ (x){离散化(x,分位数(x, [0:10] / 10))};
coNumList = @ (y) {horzcat (y)};
monthlyPercentiles = groupsummary (sampledata,“日期”,“月”pctlFun,“tp”)