楼主: 阿狸与桃子
2351 2

[数据管理求助] stata求分组移动最值等 [推广有奖]

  • 8关注
  • 5粉丝

已卖:211份资源

副教授

16%

还不是VIP/贵宾

-

威望
0
论坛币
15879 个
通用积分
268.4378
学术水平
31 点
热心指数
34 点
信用等级
19 点
经验
2473 点
帖子
379
精华
0
在线时间
747 小时
注册时间
2013-11-13
最后登录
2020-1-31

楼主
阿狸与桃子 发表于 2014-9-6 11:11:56 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
各位老师同学好,借用一帖的数据问个问题:
在sort code和price之后,在stata中怎样根据“code”变量,求“price”每30天的移动最小值、最大值或者比如30%分位数的值?比如在第30天求第1天到第30天中的最小值,在第31天求第2天到第31天中的最小值。
数据结构如下:(做了简化,每个code值应该超过30个):
(原帖问的是求分组移动平均值,可以采用命令movavg完成。https://bbs.pinggu.org/thread-3154444-1-1.html
我的问题其实就是有没有类似于movavg的命令来实现求分组移动最值。)
codedateprice

2

12/31/2013

8.03

2

12/30/2013

7.86

2

12/27/2013

8.03

2

12/26/2013

7.8

2

12/25/2013

7.91

2

12/24/2013

7.83

2

12/23/2013

7.79

2

12/20/2013

7.85

2

12/19/2013

8.14

2

12/18/2013

8.26

2

12/17/2013

8.27

2

12/16/2013

8.43

2

12/13/2013

8.54

2

12/12/2013

8.53

2

12/11/2013

8.54

2

12/10/2013

8.67

2

12/9/2013

8.62

2

12/6/2013

8.67

2

12/5/2013

8.74

2

12/4/2013

8.74

2

12/3/2013

8.65

2

12/2/2013

8.56

2

11/29/2013

8.76

2

11/28/2013

8.69

2

11/27/2013

8.56

2

11/26/2013

8.54

2

11/25/2013

8.61

2

11/22/2013

8.7

2

11/21/2013

8.83

2

11/20/2013

9.1

2

11/19/2013

9.08

2

11/18/2013

9.2

2

11/15/2013

8.91

2

11/14/2013

8.69

2

11/13/2013

8.76

2

11/12/2013

8.81

2

11/11/2013

8.71

2

11/8/2013

8.87

2

11/7/2013

8.97

2

11/6/2013

9.02

3

11/5/2013

9.2

3

11/4/2013

9.2

3

11/1/2013

9.39

3

10/31/2013

9.21

3

10/30/2013

9.08

3

10/29/2013

8.85

4

10/28/2013

8.73

4

10/25/2013

8.9

4

10/24/2013

8.96

4

10/23/2013

9.07

4

10/22/2013

9.08

4

10/21/2013

9.18

4

10/18/2013

9.17

5

10/17/2013

9.07

5

10/16/2013

9.07

5

10/15/2013

9.19

5

10/14/2013

9.2

5

10/11/2013

9.44

5

10/10/2013

9.41






谢谢大家~
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:Stata tata thread pinggu Price 平均值 最大值 price

沙发
阿狸与桃子 发表于 2014-9-6 11:16:41
以前问过类似问题,当时是通过编程的手段来解决的:

forvalue i=1/30{
bys code:egen minprice`i'=min(price[_n] ,price[_n-`i'+1])
}
egen minprice1=rowmin(minprice*)


这样的确可以完成任务,但是涉及到会生成很多中间变量,在时间序列研究中观测值经常会很多,生成一个新变量就会增加很多的内存耗用量。所以希望能找到比较简洁的命令或者其他编程方式。
还请大家多多帮助

藤椅
ywh19860616 发表于 2014-9-6 21:38:07
  1. clear
  2. set obs 30
  3. egen code = seq(),from(1) to(6)
  4. sort code
  5. gen  price = uniform()

  6. matrix A = J(3,6,0)
  7. preserve
  8. forv i = 1/6 {
  9. qui keep if code==`i'

  10. tempfile file1
  11. qui save "`file1'",replace
  12. forv j = 3/5 {
  13. local k1 = `j' - 2
  14. local k2 = `j' - 1
  15. qui keep in `k1'/`k2'
  16. sort price
  17. matrix A[`k1',`i'] = price[1]
  18. qui use "`file1'",clear
  19. }
  20. restore,preserve
  21. }

  22. mat l A
复制代码


以上是一个简化的程序,把结果储存在矩阵中。你看思路是否可以,如果可以,再编写的完整写。
还有,你上面的程序或者可以通过生成tempvar来解决。
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
Stakiny + 1 + 1 + 1 热心帮助其他会员

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jltj
拉您入交流群
GMT+8, 2025-12-16 06:22