楼主: xinx13
87024 12

关于stata数个变量求均值的命令 [推广有奖]

  • 0关注
  • 1粉丝

硕士生

16%

还不是VIP/贵宾

-

威望
0
论坛币
563 个
通用积分
2.0006
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
4177 点
帖子
57
精华
0
在线时间
207 小时
注册时间
2006-2-25
最后登录
2016-4-14

15论坛币
如题:比如就是求关于每一个观测量的数个变量下的均值。但是希望当观测值为0的时候不进入计算。

比如下面就是对s1,s2,s3,s4四个变量下得值求均值,而其中有0的时候不进入计算,即CODE为1和3的均值是3个变量下得,而CODE为4的均值计算两个变量下得均值。
求教求教。

code        s1            s2        s3            s4
1             0              3         5              4
2             1              5        4               6
3             5             0         4               1
4             0              6         5              0

最佳答案

Ray啊Ray 查看完整内容

先把0全都换成缺失值 再用egen命令 具体如下 replace s1=. if s1==0 replace s2=. if s2==0 replace s3=. if s3==0 replace s4=. if s4==0 egen a=rowmean(s1 s2 s3 s4) 应该就ok了 egen rowmean会自动忽略缺失值
关键词:Stata tata code COD ODE

回帖推荐

较拉峭 发表于7楼  查看完整内容

终于被我想到了,可以这么解决。比如你的数据时这样的。暂时限定为是s1-s4,四个变量,多了也一样的。 egen a=anycount(s1-s4), values(0) egen b=rownonmiss(s1-s4) egen c=rowtotal(s1-s4) gen d=c/(b-a) 第一句,用egen首先生成一个数值变量,这个变量代表的是从s1-s4里面所有的等于0的值有多少个,比如code=1时,a就等于1,code=2时,a就等于0(因为code=2时,没有等于0的数)。 第二句,用egen命令在生成一个每一行 ...

本帖被以下文库推荐

沙发
Ray啊Ray 在职认证  发表于 2012-3-16 18:34:14 |只看作者 |坛友微信交流群
先把0全都换成缺失值 再用egen命令 具体如下
replace s1=. if s1==0
replace s2=. if s2==0
replace s3=. if s3==0
replace s4=. if s4==0
egen a=rowmean(s1 s2 s3 s4)

应该就ok了 egen rowmean会自动忽略缺失值

使用道具

藤椅
stfreezen 发表于 2012-3-16 18:46:25 |只看作者 |坛友微信交流群
我觉得可以先把data转换一下形式
stata使用直列式的比较容易
varA  varB
0       1
3       5
5       4
4       6
varA即code1
varB即code2
C D以此类推排列
接着你便可以开始做
再做codeA时
sum varA if varA>0
意思是只取大于零的去求摘要
出来的表格,便有均值了
code2同理
sum varB if varB>0

应该是这样
最近比较常用E-views
Stata有点忘了

使用道具

板凳
xinx13 发表于 2012-3-16 19:29:13 |只看作者 |坛友微信交流群
stfreezen 发表于 2012-3-16 18:46
我觉得可以先把data转换一下形式
stata使用直列式的比较容易
varA  varB
谢谢你
可是这样的话,如果我的数据量非常大,那转置后使用sum能有简单方法吗
还有最重要的是我需要的均值在以后的回归中使用,转置后计算出来的数值怎么和以前的数据库匹配啊?
stata不熟练啊··问题蛮多的···

使用道具

报纸
sungmoo 发表于 2012-3-16 20:36:45 |只看作者 |坛友微信交流群
*若变量数不多,可用
g m=(s1+s2+s3+s4)/((s1!=0)+(s2!=0)+(s3!=0)+(s4!=0))

使用道具

地板
stfreezen 发表于 2012-3-16 20:50:54 |只看作者 |坛友微信交流群
xinx13 发表于 2012-3-16 19:29
谢谢你
可是这样的话,如果我的数据量非常大,那转置后使用sum能有简单方法吗
还有最重要的是我需要的均 ...
如果数据非常大,可以用excel的"巨集"功能,只需要做一次(例如varA),按下录制”巨集”,之后就可以每项套用。
算出来的均值如果要放入原数据库,我目前没有想到简单的方法或指令,
只有比较"慢"的方法,就是将跑出来的结果用log档存起来,之后开启,把要的东西放到excel去,一样使用巨集排列成直行,之后就可以贴回原数据库了

不过也可以像其他回答者所言,先将0换成missing point,也就是"."
然后放回excel中,用简单的函式就可以跑出你要的均数
你再将之贴回回归用的数据库即可
我觉得这样可能比较快速!

使用道具

7
较拉峭 在职认证  发表于 2012-3-16 21:59:56 |只看作者 |坛友微信交流群
终于被我想到了,可以这么解决。比如你的数据时这样的。暂时限定为是s1-s4,四个变量,多了也一样的。 无标题.png
egen a=anycount(s1-s4), values(0)
egen b=rownonmiss(s1-s4)
egen c=rowtotal(s1-s4)
gen d=c/(b-a)


第一句,用egen首先生成一个数值变量,这个变量代表的是从s1-s4里面所有的等于0的值有多少个,比如code=1时,a就等于1,code=2时,a就等于0(因为code=2时,没有等于0的数)。
第二句,用egen命令在生成一个每一行里面没有缺失值的变量的个数,这里你的数据里面都没有缺失值,所以b都等于4。
第三句,在生成,每一行的总和数,但是这个总和数计算的时候是包括零的。所以算均值的时候,要把每一行等于0的数减去。
就有第四句。按照这种算法,简单的数据看来是没有问题的。你可以用你的大数据试试。如果真的能行,论坛币要给我哦。
logistic、分层、R、stata

使用道具

8
较拉峭 在职认证  发表于 2012-3-16 22:04:40 |只看作者 |坛友微信交流群
图片传错了,不好意思,如果按照刚才的图片的话,那么就按照字母顺序下移一个,那么最后的e就是你要的均值。
logistic、分层、R、stata

使用道具

9
xinx13 发表于 2012-3-17 09:53:24 |只看作者 |坛友微信交流群
较拉峭 发表于 2012-3-16 22:04
图片传错了,不好意思,如果按照刚才的图片的话,那么就按照字母顺序下移一个,那么最后的e就是你要的均值。 ...
貌似最佳答案只能选一个·
我先看了前面的答案了。
这样吧!我再重新开个贴,还是这个题目吧··然后你回复我把论坛币给您
谢谢了

使用道具

10
较拉峭 在职认证  发表于 2012-3-17 15:46:18 |只看作者 |坛友微信交流群
xinx13 发表于 2012-3-17 09:53
貌似最佳答案只能选一个·
我先看了前面的答案了。
这样吧!我再重新开个贴,还是这个题目吧··然后你 ...
呵呵,好的。我还没有得过悬赏呢。一定要的一个,谢谢你啊。你象征性的给两个论坛币吧,哈哈,祝学习快乐!
logistic、分层、R、stata

使用道具

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

本版微信群
加好友,备注jltj
拉您入交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-28 07:42