楼主: andystata
28533 17

[一般统计问题] stata 出现weights not allowed [推广有奖]

  • 3关注
  • 0粉丝

本科生

25%

还不是VIP/贵宾

-

威望
0
论坛币
935 个
通用积分
0.0617
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
1116 点
帖子
58
精华
0
在线时间
68 小时
注册时间
2015-7-2
最后登录
2017-11-1

楼主
andystata 发表于 2015-7-3 11:47:11 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币

我想求元素个数为10的列向量x的累计的算术平均值:set obs 10
gen m=x
forvalues i=1/10{ replace m[i+1]=mean(x[1]-x[i+1])
}
为什么总是显示weights not allowed?



二维码

扫码加我 拉你入群

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

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

关键词:weights allowed Weight Allow weigh

回帖推荐

蓝色 发表于9楼  查看完整内容

gen meanx=sum(x)/_n

沙发
andruw 在职认证  发表于 2015-7-3 15:46:11
两个错误:
1. mean()是egen的函数,不能用replace.
2. m[i+1]不能用,如果确实要用应该为
  1. replace m = ... in `i'
复制代码
楼主的问题,可以这样实现:
  1. . clear

  2. . input x

  3.              x
  4.   1. 1
  5.   2. 3
  6.   3. 4
  7.   4. 2
  8.   5. 7
  9.   6. 9
  10.   7. 10
  11.   8. 3
  12.   9. 6
  13. 10. 8
  14. 11. end

  15. .
  16. . list

  17.      +----+
  18.      |  x |
  19.      |----|
  20.   1. |  1 |
  21.   2. |  3 |
  22.   3. |  4 |
  23.   4. |  2 |
  24.   5. |  7 |
  25.      |----|
  26.   6. |  9 |
  27.   7. | 10 |
  28.   8. |  3 |
  29.   9. |  6 |
  30. 10. |  8 |
  31.      +----+

  32. .
  33. . gen m = .
  34. (10 missing values generated)

  35. . forvalues i = 1/10 {
  36.   2.         egen b = mean(x) if _n <= `i'
  37.   3.         replace m = b in  `i'
  38.   4.         drop b
  39.   5. }
  40. (9 missing values generated)
  41. (1 real change made)
  42. (8 missing values generated)
  43. (1 real change made)
  44. (7 missing values generated)
  45. (1 real change made)
  46. (6 missing values generated)
  47. (1 real change made)
  48. (5 missing values generated)
  49. (1 real change made)
  50. (4 missing values generated)
  51. (1 real change made)
  52. (3 missing values generated)
  53. (1 real change made)
  54. (2 missing values generated)
  55. (1 real change made)
  56. (1 missing value generated)
  57. (1 real change made)
  58. (1 real change made)

  59. . list

  60.      +---------------+
  61.      |  x          m |
  62.      |---------------|
  63.   1. |  1          1 |
  64.   2. |  3          2 |
  65.   3. |  4   2.666667 |
  66.   4. |  2        2.5 |
  67.   5. |  7        3.4 |
  68.      |---------------|
  69.   6. |  9   4.333333 |
  70.   7. | 10   5.142857 |
  71.   8. |  3      4.875 |
  72.   9. |  6          5 |
  73. 10. |  8        5.3 |
  74.      +---------------+
复制代码

藤椅
andystata 发表于 2015-7-4 10:44:50
andruw 发表于 2015-7-3 15:46
两个错误:
1. mean()是egen的函数,不能用replace.
2. m不能用,如果确实要用应该为楼主的问题,可以这样 ...
5747897D-7481-4CB4-B050-A5833D94154E.png 谢谢~~但是为什么我显示的是这个啊。。求解答~

板凳
andruw 在职认证  发表于 2015-7-4 16:04:59
andystata 发表于 2015-7-4 10:44
谢谢~~但是为什么我显示的是这个啊。。求解答~
  1. if_n<=`i'
复制代码
应为
  1. if _n <= `i'
复制代码
注意 if 与_n之间有空格。

报纸
andystata 发表于 2015-7-4 16:07:27
andruw 发表于 2015-7-4 16:04
应为注意 if 与_n之间有空格。
嗯嗯 谢谢 问题是解决了  但是我的数据有一千万个 这样算好慢。。请问还有办法吗?

地板
andystata 发表于 2015-7-4 16:12:21
andruw 发表于 2015-7-4 16:04
应为注意 if 与_n之间有空格。
在你的启示下,我是这样写的
gen m=.
forvalues i=1/10000000{
  gen b=v/`i'
   replace m=b in `i'
   drop b
}
但是也还是好慢。。

7
andruw 在职认证  发表于 2015-7-4 16:17:46
andystata 发表于 2015-7-4 16:12
在你的启示下,我是这样写的
gen m=.
forvalues i=1/10000000{
按照你的代码:
  1. gen m = .
  2. forvalues i = 1/10000000 {
  3.    scalar b = v/`i'
  4.    replace m = b in `i'
  5. }
复制代码
生成scalar比生成variable稍微快一点。
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
andystata + 1 + 1 + 1 我很赞同

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

8
andystata 发表于 2015-7-4 16:17:48
andystata 发表于 2015-7-4 16:12
在你的启示下,我是这样写的
gen m=.
forvalues i=1/10000000{
gen v=sum(x)

9
蓝色 发表于 2015-7-4 16:18:19
gen meanx=sum(x)/_n
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
andystata + 1 + 1 + 1 我很赞同

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

10
andruw 在职认证  发表于 2015-7-4 16:28:21
andystata 发表于 2015-7-4 16:12
在你的启示下,我是这样写的
gen m=.
forvalues i=1/10000000{
还有一个加速的办法,就是用mata写个小程序。

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

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