楼主: xixi221zmw
9318 25

急问:遇到一个关于计算标准差的难题 [推广有奖]

  • 3关注
  • 0粉丝

硕士生

31%

还不是VIP/贵宾

-

威望
0
论坛币
148 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
199 点
帖子
158
精华
0
在线时间
122 小时
注册时间
2009-2-14
最后登录
2017-6-6

楼主
xixi221zmw 发表于 2011-8-31 09:03:35 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
变量有250个观测值,想从第1个观测值开始,计算第1个至第125个观测值的样本标准差,然后再计算第2个到第126个观测值的样本标准差,以此类推,逐次后退一个观测值计算。想了一大半天,实现不了。老板急着要结果。。
非常非常感谢!!!!!在线等。。。
PS:昨天一着急发到SAS版了,两位老大帮忙,发了代码,可惜用不上,angway,在这里,再一次,非常感谢!!!
二维码

扫码加我 拉你入群

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

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

关键词:标准差 非常感谢 观测值 在线等 Way 标准差 在线 样本

沙发
bithuye 发表于 2011-8-31 09:27:32
matlab啊,
假设data存的是250个数据。
for i= 1:125
   compute = data[i:i+125];
   res(i) = std(compute);
end
最后res中的数据就是了。

藤椅
bithuye 发表于 2011-8-31 09:29:53
std是matlab有的函数

板凳
xixi221zmw 发表于 2011-8-31 09:46:44
老板就是要我用stata算啊,因为前期都是用的stata,悲催。。。

报纸
xixi221zmw 发表于 2011-8-31 09:48:05
bithuye 发表于 2011-8-31 09:29
std是matlab有的函数
谢谢!!!!因为被要求用stata算,所以。。。用stata的循环能够实现吗?

地板
liuxb 发表于 2011-8-31 11:57:26
试试下面的程序:
capture drop sd
gen sd=.
local nloop=250-125+1
forvalue i=1(1)`nloop' {
    qui sum x if _n>=`i' & _n<=125+(`i'-1)
    qui replace sd=r(sd) if _n==`i'
}
list sd if sd!=.

7
xixi221zmw 发表于 2011-8-31 14:00:01
liuxb 发表于 2011-8-31 11:57
试试下面的程序:
capture drop sd
gen sd=.
解决了 谢谢大牛!!!!
ps:想提高自己的stata编程能力,可否推荐一些教材或者资料??谢谢!!

8
xixi221zmw 发表于 2011-8-31 14:05:04
liuxb 发表于 2011-8-31 11:57
试试下面的程序:
capture drop sd
gen sd=.
还想再请教一下,如果有多组,每组都是250个观测值,仍然从第1个观测值开始,计算第1个至第125个观测值的样本标准差,然后再计算第2个到第126个观测值的样本标准差,以此类推,逐次后退一个观测值计算。每一组都这样,如何实现?

9
liuxb 发表于 2011-8-31 15:25:30
*1. if group=1…k and data is long form:

capture drop sd
qui gen sd=.
local nloop=250-125+1

qui sum group
local ngroup=r(max)

forvalue k=1(1)`ngroup'{
    local istart=(`k'-1)*250+1
    local iend=(`k'-1)*250+`nloop'
       
    forvalue i=`istart'(1)`iend' {
        qui sum x if _n>=`i' & _n<=125+(`i'-1)
        qui replace sd=r(sd) if _n==`i'
    }
}

bysort group:list sd if sd!=.

*2. if group=1…k and data is wide form:
* For example: k=3

local nloop=250-125+1

foreach var of varlist x1-x3 {
    capture drop sd`var'
    qui gen sd`var'=.
       
    forvalue i=1(1)`nloop' {
        qui sum `var' if _n>=`i' & _n<=125+(`i'-1)
        qui replace sd`var'=r(sd) if _n==`i'
    }
}

list sd* if _n<=126

10
xixi221zmw 发表于 2011-8-31 15:47:22
liuxb 发表于 2011-8-31 15:25
*1. if group=1…k and data is long form:

capture drop sd
出手好快啊!!先谢谢!!!马上试试

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

本版微信群
加好友,备注jltj
拉您入交流群
GMT+8, 2026-1-4 05:05