Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Stata:估计投资组合的月加权平均数

Stata:估计投资组合的月加权平均数
EN

Stack Overflow用户
提问于 2015-02-21 15:25:15
回答 1查看 2.7K关注 0票数 0

我一直在努力编写最优的代码来估计月平均投资组合的收益。

我有以下变量:

  • 公司股票回报率(ret)
  • month1、year1和date
  • 投资组合(port1):这定义了公司股票回报的投资组合。
  • 市值:估计权重( month1 year1 port1)

我想计算每个月的加权回报和按市值加权的投资组合。(mcap)每一家公司。

我编写了以下代码,这些代码工作正常,但需要很长时间,而且效率很低:

代码语言:javascript
运行
AI代码解释
复制
foreach x in 11 12 13 21 22 23 {
display `x'

forvalues y = 1980/2010 {
display `y'

forvalues m = 1/12 {
display `m'
tempvar tmp_wt tmp_tm tmp_p
egen `tmp_tm' = total(mcap) if month1==`m' & year1==`y' & port1 ==`x'
gen `tmp_wt' = mcap/`tmp_tm' if month1==`m' & year1==`y' & port1 ==`x'
gen `tmp_p' = ret*`tmp_wt' if month1==`m' & year1==`y' & port1 ==`x'
gen port_ret_`m'_`y'_`x' = `tmp_p'

}
}
}

数据看起来如图像中所示:

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-21 16:55:02

这似乎是一个例子,说明如何尽可能慢地做事情,除了你自然不是故意这样做的。它所缺少的只是一个循环的观测来计算总数。因此,好消息是,你确实应该能够加快速度。

它似乎可以归结为

代码语言:javascript
运行
AI代码解释
复制
gen double wanted = . 
bysort port1 year month : replace wanted = sum(mcap) 
by port1 year month : replace wanted = (mcap * ret) / wanted[_N] 

原则。要在单个标量中获得和,请使用summarize, meanonly,而不是使用egen, total()将标量反复放入变量中,但在需要时使用sum()by:将组和放入变量中,如下所示。sum()返回累积和,因此您需要累积和的最后一个值。

原则。当groupwise计算可以在foreach的支持下完成时,不需要循环(这里使用by: )。这是Stata程序员需要学习的一个强大的构造。

原则。创建大量临时变量(在这里6* 31 * 12 *3= 6696 )将减缓速度,使用比所需的内存更多的内存。每次执行tempvar并执行generate命令时,都会有另外三个临时变量,它们都是dataset中列的大小(这就是Stata中变量的大小),但是一旦使用了它们,它们就会留在内存中,再也不会被查看了。这是一个临时变量的微妙之处,tempvar每次都会指定一个新的名称,但是应该很清楚,generate每次都会创建一个新变量;generate永远不会覆盖现有的变量。临时变量都会在程序结束时被删除,但是在程序结束时,您会不必要地保存很多东西,可能是数据集的大小乘以大约1000。如果临时扩展的数据集不能全部存储在内存中,则可以将Stata翻转为爬行。

原则。使用if要求Stata依次检查每个观察;在这种情况下,大多数与正在执行的循环的特定交点无关,因此在对数据集的1/2232进行每个特定计算时,Stata检查几乎所有的数据集(分数为2231/2232,几乎为1)。如果你有更多的年,或者更多的投资组合,那么看起来不相关的比例就更高了。

本质上,Stata将服从您的指示(而不是尝试任何类型的优化--您的代码是完全按字面解释的),但是by:会给出更快的交叉组合。

请注意。我不知道这些数字会有多大或接近于零,所以我给了你一个double。据我所知,float对你来说很好。

备注。我猜您正在受到其他语言的编码经验的影响,在其他语言中,创建变量意味着类似于x = 42来保持常量。您也可以在Stata中这样做,使用标量或本地或全局宏,更不用说Mata了。请记住,( Stata中的一个新变量)是dataset中的一个完整的新列,无论它在每个观察中持有一个常数还是不同的值。你会得到你想要的东西,但这更像是每次都得到一个数组。同样,您似乎只需要一个新变量作为最终结果,而且实际上根本不需要创建任何其他变量。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28652615

复制
相关文章
SpringBoot + QueryDSL 大大简化复杂查询操作
概述 本篇博客主要将介绍的是利用spring query dsl框架实现的服务端查询解析和实现介绍。 查询功能是在各种应用程序里面都有应用,且非常重要的功能。用户直接使用的查询功能往往是在我们做好的UI界面上进行查询,UI会将查询请求发给查询实现的服务器,或者专门负责实现查询的一个组件。市场上有专门做查询的框架,其中比较出名,应用也比较广泛的是elasticsearch。 定义查询请求 对于服务端来说,前端UI发送过来的查询请求必然是按一定规则组织起来的,这样的规则后端必须能够支持和解析。换一种说法就是服
程序猿DD
2022/05/25
1.7K0
SpringBoot + QueryDSL 大大简化复杂查询操作
jQuery将form列表转JSON
一、form表单序列化后的格式 image.png 二、JS 函数 function filedSelectJson(){ var a = {}; var reserveVenueCons = $("#orderForm").serializeArray(); var numreg = /\[[0-9]*\]\./;//正则表达式 var index = 0; var attnum = 5;//list对象中有几个属性,这里有5个:reserveField.id,
week
2018/08/27
3.7K0
jQuery将form列表转JSON
Python将字符串转换为列表
We can convert a string to list in Python using split() function.
全栈程序员站长
2022/09/06
6.2K0
将tensor转换为图像_tensor转int
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/07
12K0
Java将列表转换为数组,反之亦然
在本文中, 我们将快速学习如何将Java List (例如ArrayList )转换为数组,反之亦然。 如果您希望总体上了解有关ArrayList的更多信息,请随时阅读我们有关Java ArrayLists的文章。
用户7886150
2021/04/28
3.5K0
Python将两个列表转换为字典
最开始,我是想用2层for循环实现,但是发现太麻烦了。最简单的方法,使用zip()函数即可。
py3study
2020/08/26
5.2K0
深入探索Spring Data JPA, 从Repository 到 Specifications 和 Querydsl
数据访问层,所谓的CRUD是后端程序员的必修课程,Spring Data JPA 可以让我们来简化CRUD过程,本文由简入深,从JPA的基本用法,到各种高级用法。
JadePeng
2020/11/13
2K0
springboot2.X 使用spring-data组件对MongoDB做CURD
基于快速开发,需求不稳定的情况, 我决定使用MongoDB作为存储数据库,搭配使用spring-data
suveng
2019/09/17
2.1K0
java map 转string_java-将Map <String,Object>转换为Map <String,String>
Map map = new HashMap(); //Object is containing String
全栈程序员站长
2022/08/25
12.7K0
Spring JPA 拓展
本节记录了一组Spring数据扩展,它们支持在各种上下文中使用Spring数据。目前,大部分集成都是针对Spring MVC的。
Kindear
2020/09/10
1.3K0
Spring JPA 拓展
Python 元组转换为列表
结论:当给定一个可迭代对象(如列表、元组、集合、范围等)时,list() 和 tuple() 返回一个新的列表和元组
Python学习者
2023/07/17
3120
Mybatis-plus 使用 typeHandler 将 String 拼接字符串转换为 List 列表
学生可以有多个角色,但是这多个角色我是作为多条记录存储在另外一张表中的,现在想将这多条记录查询出来,注入到Student对象中的一个List属性中去。
wsuo
2023/01/13
6.5K0
Mybatis-plus 使用 typeHandler 将 String 拼接字符串转换为 List 列表
java将字符串转换为json对象的方法_java jsonobject转string
在与服务器交互的时候,我们往往会使用json字符串,今天的例子是java对象转化为字符串,
全栈程序员站长
2022/11/08
22K0
将字符串转换为date类型_java字符串转date类型
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/09
14.6K0
58 - 编写一个生产器,将一个二维列表转换为一维列表
编写一个生产器,将一个二维列表转换为一维列表 ''' python生成器(迭代) yield ''' def myGenerator(): numList = [1, 2, 3, 4, 5, 6, 7, 8] for num in numList: yield num for num in myGenerator(): print(num, end=' ') 1 2 3 4 5 6 7 8 ''' [[1,2,3],[2,4,1],[2,4,6]] [1,2,
ruochen
2021/06/08
7920
58 - 编写一个生产器,将一个二维列表转换为一维列表
springJPA 之 QueryDSL(一)
引言 不可否认的是 JPA 使用是非常方便的,极简化的配置,只需要使用注解,无需任何 xml 的配置文件,语义简单易懂,但是,以上的一切都建立在单表查询的前提下的,我们可以使用 JPA 默认提供的方法,简单加轻松的完成 CRUD 操作。 但是如果涉及到多表动态查询, JPA 的功能就显得有些捉襟见肘了,虽然我们可以使用注解 @Query ,在这个注解中写 SQL 或者 HQL 都是在拼接字符串,并且拼接后的字符串可读性非常的差,当然 JPA 还为我们提供了 Specification 来做这件事情,从我个人使用体验上来讲,可读性虽然还不错,但是在初学者上手的时候, Predicate 和 CriteriaBuilder 使用方式估计能劝退不少人,而且如果直接执行 SQL 连表查询,获得是一个 Object[] ,类型是什么?字段名是什么?这些都无法直观的获得,还需我们手动将 Object[] 映射到我们需要的 Model 类里面去,这种使用体验无疑是极其糟糕的。
全栈程序员站长
2022/09/20
5.3K0
将KITTI转换为PASCAL VOC
import os, sysimport globfrom PIL import Image # VEDAI 图像存储位置src_img_dir = "D:\dataset\cityscapes\leftImg8bit\\train\\zurich\\"# VEDAI 图像的 ground truth 的 txt 文件存放位置src_txt_dir = "D:\dataset\cityscapes\gtFine\\train\\zurich\\"src_xml_dir = "D:\dataset\citys
狼啸风云
2020/07/14
7700
Spring Data JPA中使用QueryDSL进行查询
插件的作用是把带有@Entity注解的实体类在指定路径target/generated-sources/java下生成一个衍生的实体类,我们后面就是用这个衍生出来的实体类去构建动态查询的条件进行动态查询。
砒霜拌辣椒
2023/08/23
2.1K0
Spring Data JPA中使用QueryDSL进行查询
聊聊querydsl的生成类
querydsl强大是强大,但是Q类这么一搞,有点搞复杂了,想完全屏蔽sql是不可能的,有一定适用场景,但不是万能。
code4it
2018/09/17
1.5K0
点击加载更多

相似问题

QueryDSL:从谓词(BooleanExpression)对象中提取表名

12

优化Querydsl BooleanExpression查询

11

如何在QueryDSL中为多对多关系创建谓词BooleanExpression

14

QueryDSL中的可重用BooleanExpression

10

如何在QueryDSL BooleanExpression中使用SubQeryExpression

189
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档