月排名股票收益

6视图(30天)
Syabil
Syabil 2023年5月12日
回答: Eric Sofen 2023年6月5日20:10
我有一个表为每个公司股票收益在美国,每个月从2000 - 2019。每个月都有大约3000家公司(和预测回报)。我想这些预测返回到十十分位数,等分1有每个月10%的预期回报率最高(90),等等所以等分10 10%的预期回报率最低月(第十百分位)。我试着使离散但这个函数一起排在整个表,而不是月。最后,我希望能够把所有等分1实际返回到一个表,等分2返回到另一个表,然后找到每个月的平均回报率,在每一个等分。我知道我可以使用groupsummary这样做,但我需要首先得到十分位数分配。任何建议吗?谢谢。
我附加样本数据,我相信是我的表的结构。我把我的表和随机部分放在一起。原始表长700 k +行。我需要等级由“tp”(预测返回),最后我希望找到平均每月“仓促”(实际返回)各等分。谢谢!
2的评论
Syabil
Syabil 2023年5月13日
嗨,对不起。现在我添加了一些示例数据问题。谢谢!

登录置评。

答案(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循环,您可以添加逻辑处理来自原始表中提取数据。
参考文档页面 , 独特的 , 排序 了解更多关于函数代码片段中使用,在MATLAB如何处理表格数据。
1评论
Syabil
Syabil 2023年5月20日23:32
编辑:Syabil 2023年5月20日23:45
嗨,桑托什,
谢谢你!最后一个问题,我做了处理,但在循环结束后,我只剩下的d值(即最后一环。2018年12月以来上个月在我的表)。我知道每个循环会覆盖之前的交流过程。所以我怎么提取的值前几个月前(最好到原始表)覆盖?大多数答案时我发现在这个网站上都具有独特的每一行我的价值观,例如I = 1:10也10行,但是我的数据会有成千上万的行具有相同的idx的价值。我如何规避?谢谢。
idx = 1:长度(uniqueDates)
%根据选择行
% fulltable yyyymm只是我实际表和变量名
易被诱惑的= fulltable (fulltable。yyyymm = = uniqueDates (idx):);
%从易被诱惑的写下你的逻辑来处理数据
d =离散化(可诱惑的{:,“tp”分位数(可诱惑的{}:,“tp”},(0:10)/ 10));
结束

登录置评。


Eric Sofen
Eric Sofen 2023年6月5日20:10
首先,让你的日期到datetime而不是YYYYMM翻倍!
然后,您可以使用groupsummary组数据按月做上面的离散化。棘手的是,每个月似乎有不同的公司数量,所以输出的大小从每月不等。为了解决这一问题,我们包装在一个单元的输出。然后,对于任何给定的月,如果你想要公司数字对应的分位数,你得指数回列表…
负载sampledata.mat
sampledata。日期= datetime(字符串(sampledata.dates), InputFormat =“yyyymm”);
头(sampledata)
日期companynumber tp RET ____________________ _________________ ____ ____ 01 - 79678年1月- 2000年00:01:00 0.10131 0.5681 01 - 84828年1月- 2000年00:01:00 01 - 81127年1月- 2000年00:01:00 0.10192 0.10181 - 1.4585 1.129 01 - 80320年1月- 2000年00:01:00 01 - 77668年1月- 2000年00:01:00 0.10641 0.10388 - 1.1066 0.11021 0.74181 01 - 87092年1月- 2000年00:01:00 0.1373 01 - 80049年1月- 2000年00:01:00 0.11454 - 0.92289 01 - 83531年1月- 2000年00:01:00 0.1147 - 0.51898
pctlFun = @ (x){离散化(x,分位数(x, [0:10] / 10))};
coNumList = @ (y) {horzcat (y)};
monthlyPercentiles = groupsummary (sampledata,“日期”,“月”pctlFun,“tp”)
monthlyPercentiles =4×3表
month_dates GroupCount fun1_TPER ___________ __________ _________________1月30 - 2000{30×1双}2004年1月- 15 15×1双}{2011年1月- 15 15×1双}{1月30 - 2015{30×1双}
根据你最终想要的格式,您还可以使用rowfun找哪些公司在每个分位数,然后把每个分位数的公司进入细胞,进入表。类似于 这个例子

类别

找到更多的在描述性统计帮助中心文件交换

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!