全部版块 我的主页
论坛 计量经济学与统计论坛 五区 计量经济学与统计软件 Stata专版
13557 15
2013-07-16


请教如何写程序生成一个新变量Y2

数据表:

  

obs

  

X

Y1

Y2

1

A

4

2

B

5

3

C

9

4

D

6

5

E

3

6

F

8

关联矩阵:

  

A

  

B

C

D

E

B

E

F

C

A

D

F

D

B

C


请教如何生成一个新变量Y2


Y2的取值为根据关联矩阵计算数据表中x所对应的Y1的均值

如关联矩阵中第一行A所对应的BCDE的Y1的均值,则为数据表中第一个 样本 的Y2的取值                          

第一个样本的Y2=(5+9+6+3)/4=5.75

根据关联矩阵中第二行B所对应的EF的Y1的均值,则为数据表中第二个 样本 的Y2的取值

第二个 样本 的 Y2=(3+8)/2=5.5

根据关联矩阵 中第三行 C所对应的ADF的Y1的均值,则为数据表中第三个 样本 的Y2的取值

第三个样本的Y2=(4+6+8)/3=6

以此类推

如何用程序实现

非常感谢!


二维码

扫码加我 拉你入群

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

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

全部回复
2013-7-16 19:13:17
请高手指点一下,之前想到用矩阵方法算,但是因为关联矩阵都不是对齐的,估计不行。应该是编程做循环,但是感觉太复杂了,还请高手指点一二。万分感激!
二维码

扫码加我 拉你入群

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

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

2013-7-17 13:03:43
这个可以有很多种方法:Mata、matrix矩阵运算,也可以使用普通的Stata数据运算方式。假设你的矩阵叫作mat,下面是是一种方式:
snapshot erase _all
snapshot save,label("main data")
tempfile tmp
drop _all
matrix mat=mat'
svmat mat
drop in 1
save `tmp',replace
qui des
local k=r(k)

forva i=1/`k' {
   use `tmp',clear
   sort mat`i'
   save,replace
   snapshot restore 1
   gen mat`i'=X
   sort mat`i'
   merge 1:1 mat`i' using `tmp',keep(match master)
   sum Y1 if _merge==3
   local mean=s(mean)
   replace Y2=`mean' in `i'
   drop _merge mat`i'
   snapshot erase _all
   snapshot save, label("main data")
}
当然肯定还有更简单、更直接的方法,这只是一个不算聪明但是比较直观的办法。
二维码

扫码加我 拉你入群

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

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

2013-7-17 21:21:46
老树皮 发表于 2013-7-17 13:03
这个可以有很多种方法:Mata、matrix矩阵运算,也可以使用普通的Stata数据运算方式。假设你的矩阵叫作mat, ...
非常感谢高手指点,只是编程不是太能看懂,能大概说一下思路么?
有几个问题需要说明:
关联矩阵中第一列是和数据表中的x对应的,是不同国家的名称,而每一行后面对应的都是乱的,没有规律,我重新弄了个关联矩阵,如A对应的是CDFG,B对应的是AC,等等,是指第一列不同国家的邻国名称。
  

A

  

C

D

F

G

B

A

C

C

E

F

G

D

B

C

E

E

A

F

C

D

E

G

E

因此,我上面说的关联矩阵实际上应该不算是矩阵,因为ABCD等都是字符型的,而且不整齐,如第一行有4个,第二行有2个,第三行有3个……
local k=r(k)    请问K是什么?


请问更简单更直接的办法是什么呢?  
再次感谢!






二维码

扫码加我 拉你入群

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

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

2013-7-17 21:22:34
老树皮 发表于 2013-7-17 13:03
这个可以有很多种方法:Mata、matrix矩阵运算,也可以使用普通的Stata数据运算方式。假设你的矩阵叫作mat, ...
请问更简单更直接的办法是什么呢?
二维码

扫码加我 拉你入群

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

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

2013-7-18 09:38:03
Brdic 发表于 2013-7-17 21:22
请问更简单更直接的办法是什么呢?
使用mata,应该程序更短一些,运算也更快一些,但是对编程技术要求更高,我没时间推敲,所以只能提供一个大体方向...
二维码

扫码加我 拉你入群

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

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

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群