楼主: superzhousi
5938 9

[mata问题求助] 如何将mata 的数据传回stata [推广有奖]

  • 0关注
  • 4粉丝

讲师

43%

还不是VIP/贵宾

-

威望
0
论坛币
45561 个
通用积分
19.5089
学术水平
21 点
热心指数
33 点
信用等级
22 点
经验
5446 点
帖子
169
精华
0
在线时间
666 小时
注册时间
2007-10-30
最后登录
2024-5-3
毕业学校
Durham University, UK

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
小弟求教,如果在mata中有一个n*k的矩阵,我想把这个矩阵的数据传回到stata中,我知道使用st_addvar() 和st_store() 但是,如果我想一次生成k个变量,即矩阵的每一列都成为一个在stata中的变量而且列数如果很多, 这样应该如何来做呢? 谢谢。。
二维码

扫码加我 拉你入群

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

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

关键词:Stata tata MATA Mat Store 如何 而且

本帖被以下文库推荐

沙发
sungmoo 发表于 2010-8-30 23:24:36 |只看作者 |坛友微信交流群

使用道具

藤椅
superzhousi 发表于 2010-8-30 23:48:07 |只看作者 |坛友微信交流群
2# sungmoo
谢谢楼上,这个贴我之前看过了,不过我的问题是我需要同时从矩阵中产生多个变量储存在stata中,有点类似于一个循环语句,我现在这样写,假设我在mata中已经存储了一个n*k的矩阵x,我想生成k个变量,即x的每一列
i=1
n=k
while (i<=k) {
y=.
st_subview(y,x,.,i)
st_addobs(rows(y))
st_addvar("float", "t") /*关键就是这步和下一步,如何用st_addvar循环生成多个变量,我现在的做法只能生成一个变量t,如果我想通过循环生成t1 t2....到tk,应该怎样做
st_store(., "t",y)
i++
}

使用道具

板凳
sungmoo 发表于 2010-8-30 23:54:54 |只看作者 |坛友微信交流群
superzhousi 发表于 2010-8-30 22:47 小弟求教,如果在mata中有一个n*k的矩阵,我想把这个矩阵的数据传回到stata中,我知道使用st_addvar() 和st_store() 但是,如果我想一次生成k个变量,即矩阵的每一列都成为一个在stata中的变量而且列数如果很多, 这样应该如何来做呢? 谢谢。。
*一个比较粗浅的作法:

*(1)在stata中
. set obs n

*(2)用generate生成k个变量(变量名自己随意定),不妨令它们都只有缺失值
*(3)进入mata,生成n*k矩阵m
*(4)使用st_store()
: st_store(.,.,m)
: end

*mata中的m的值便把stata中的k个变量的值代换了。
已有 1 人评分论坛币 收起 理由
dxystata + 10 好的意见建议

总评分: 论坛币 + 10   查看全部评分

使用道具

报纸
superzhousi 发表于 2010-8-31 00:05:25 |只看作者 |坛友微信交流群
4# sungmoo
果然厉害,问题解决,没想到st_store(.,.,m)这样用,非常感谢

使用道具

地板
sungmoo 发表于 2010-8-31 00:05:44 |只看作者 |坛友微信交流群
*一个比上面稍微复杂的例子(注意st_store()中各值对结果的作用):

clear all
inp a b c d e
. . . . .
. . . . .
. . . . .
. . . . .
end

mata
z=(1,2\3,4)
st_store((2,3),("a","b"),z)
end

list
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
txje + 1 + 1 + 1 精彩帖子

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

使用道具

7
sungmoo 发表于 2010-8-31 00:10:20 |只看作者 |坛友微信交流群
st_store(a,b,c)的关键是:
(1)a、b、c都是mata中的向量;
(2)以a与b在stata当前数据库中定义出一个“观测值区域”,该区域须与c同型;
(3)以c中的值替换该区域的值。
已有 2 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
txje + 2 + 2 + 2 热心帮助其他会员
dxystata + 10 好的意见建议

总评分: 论坛币 + 10  学术水平 + 2  热心指数 + 2  信用等级 + 2   查看全部评分

使用道具

8
wbzdwss 发表于 2010-8-31 19:07:07 |只看作者 |坛友微信交流群
6# sungmoo
也在看这个东西,谨受教

使用道具

9
mysteve 发表于 2011-3-24 21:32:16 |只看作者 |坛友微信交流群
set obs 30
mata
r1=30
c1=5
a=uniform(r1,c1)
d1=J(r1,1,0)
for (i = 1; i <= c1; i++) {
d1=a[.,i]
name = "x" + strofreal(i)
st_store(.,st_addvar("float",name),d1)
}
end

使用道具

10
sungmoo 发表于 2012-5-12 01:26:06 |只看作者 |坛友微信交流群
set obs 30
mata
r1=30
c1=5
a=uniform(r1,c1)
d1=J(r1,1,0)
for (i = 1; i <= c1; i++) {
d1=a[.,i]
name = "x" + strofreal(i)
st_store(.,st_addvar("float",name),d1)
}
end
*不用循环
clear all
set ob 30
mata
a=uniform(30,5)
st_store(.,st_addvar("float",("x1","x2","x3","x4","x5")),a)
end

*用循环
clear all
set ob 30
mata
a=uniform(30,5)
for(i=1;i<=5;i++) st_store(.,st_addvar("float","x"+strofreal(i)),a[.,i])
end
已有 3 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
txje + 1 + 1 + 1 精彩帖子
dxystata + 20 热心帮助其他会员
ywh19860616 + 5 + 5 + 5 精彩帖子

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

使用道具

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

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

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

GMT+8, 2024-5-5 23:10