楼主: Brdic
13699 15

[数据管理求助] 请教一个stata的矩阵计算方法 [推广有奖]

  • 3关注
  • 14粉丝

VIP

已卖:1份资源

学科带头人

79%

还不是VIP/贵宾

-

威望
0
论坛币
7017 个
通用积分
69.7549
学术水平
74 点
热心指数
95 点
信用等级
64 点
经验
24573 点
帖子
1378
精华
0
在线时间
3421 小时
注册时间
2004-7-8
最后登录
2025-7-8

楼主
Brdic 发表于 2013-7-16 10:07:37 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币


请教如何写程序生成一个新变量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

以此类推

如何用程序实现

非常感谢!


二维码

扫码加我 拉你入群

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

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

关键词:Stata tata 计算方法 非常感谢 数据表 计算方法 数据表 程序 如何 样本

沙发
Brdic 发表于 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")
}
当然肯定还有更简单、更直接的方法,这只是一个不算聪明但是比较直观的办法。
已有 1 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
Sunknownay + 100 + 6 + 1 + 1 + 1 热心帮助其他会员

总评分: 经验 + 100  论坛币 + 6  学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

板凳
Brdic 发表于 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是什么?


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






报纸
Brdic 发表于 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,应该程序更短一些,运算也更快一些,但是对编程技术要求更高,我没时间推敲,所以只能提供一个大体方向...

7
老树皮 发表于 2013-7-18 09:39:14
Brdic 发表于 2013-7-17 21:21
非常感谢高手指点,只是编程不是太能看懂,能大概说一下思路么?
有几个问题需要说明:
关联矩阵中第一 ...
今天很忙,晚上有时间的话给你细说一下思路. 另外,k表示有多少个变量。

8
Brdic 发表于 2013-7-18 09:59:40
老树皮 发表于 2013-7-18 09:39
今天很忙,晚上有时间的话给你细说一下思路. 另外,k表示有多少个变量。
好的,非常感谢!我大概弄懂了思路了。还有几个疑问:
mat矩阵如何录入进去?因为都是字符的,而且不整齐。
snapshot有什么作用?
谢谢!

9
老树皮 发表于 2013-7-20 14:09:27
Brdic 发表于 2013-7-18 09:59
好的,非常感谢!我大概弄懂了思路了。还有几个疑问:
mat矩阵如何录入进去?因为都是字符的,而且不整齐 ...
最近很忙,所以现在才答复。不知道你是否已经解决该问题。Anyway,答复如下:

因为你一开始说是关联矩阵,所以我以为你已经有矩阵了。但实际上你看我的那个程序,还是把矩阵转化成数据序列的,只不过转置了一下。所以如果你开始就将该矩阵保存成数据序列,就不是问题了。

snapshot 的作用是将数据暂时存在内存中。当然你也可以每一步都保存在硬盘中,然后调用,但是比较慢。

10
Brdic 发表于 2013-7-20 17:00:29
老树皮 发表于 2013-7-20 14:09
最近很忙,所以现在才答复。不知道你是否已经解决该问题。Anyway,答复如下:

因为你一开始说是关联矩 ...
感谢回复!
我重新研究了一下程序,
merge 1:1 mat`i' using `tmp',keep(match master) 意思是要把数据文件和矩阵文件匹配起来,因此应该有个临时文件来放数据文件,前面没有写这句,所以gen mat`i'=X 这句也执行不了。
我重新改了下,但是最后
replace y2=`mean' in `i' 这一句命令没有把均值放在第i行,我单独运行时提示是0个值发生改变,不知怎么回事
另外,根据
save `tmp',replace
qui des /* quietly  describe*/
local k=r(k)
k是根据tmp这个文件来定义,是不是一直要打开tmp这个文件k才能循环,因为中间我又打开了数据文件,这样才能提取x,并合并,最后执行这个循环好像循环不了了。
还有,实际上我是面板数据,上面的程序只是完成了一个年份的,如果要把所有年份的都弄一遍,是不是还要弄个大循环?

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

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