全部版块 我的主页
论坛 计量经济学与统计论坛 五区 计量经济学与统计软件 Stata专版
2333 3
2014-11-30
悬赏 300 个论坛币 已解决
一、数据说明
数据参考如下的官网范例数据【grunfeld.dta】:年份1935-1954年,10个个体,共200个观测值。
复制代码
截面ID为company,年份为year,另外就是三个变量:invest、mvalue、kstock

company

year

invest

mvalue

kstock

1

1935

I1,1935

M1,1935

K1,1935

1

t

I1,t

M1,t

K1,t

1

1954

I1,1954

M1,1954

K1,1954

…… 

 …… 

 …… 

 …… 

 …… 

i

1935

Ii,1935

Mi,1935

Ki,1935

i

t

Ii,t

Mi,t

Ki,t

i

1954

Ii,1954

Mi,1954

Ki,1954

…… 

…… 

…… 

…… 

 ……

j

1935

Ij,1935

Mj,1935

Kj,1935

j

t

Ij,t

Mj,t

Kj,t

j

1954

Ij,1954

Mj,1954

Kj,1954

…… 

…… 

…… 

…… 

…… 




二、欲实现的效果
最后想要得到一个【新的数据集】每年每截面的变量值均为相除得到。也就是说:
如果按照有原本20年数据,10个个体,共计200个观测值;
最后得到的将是10*9=90个新个体/截面(newid字符型),同样20年,共计1800个新观测值。


company

newid
(字符型)

year

invest

mvalue

kstock

1

1by2

1935

I1,1935/I2,1935

K1,1935/K2,1935

1

1by2

t

I1,t/I2,t

K1,t/K2,t

1

1by2

1954

I1,1954/I2,1935

K1,1954/K2,1954

……

…… 

…… 

……

……

……

1

1byi

t

I1,t/Ii,t

M1,t/M2,t

……

……

…… 

……

……

……

i

ibyj

1935

Ii,1935/Ij,1935

Ki,1935/Kj,1935

i

ibyj

t

Ii,t/Ij,t

`

Ki,t/Kj,t

i

ibyj

1954

Ii,1954/Ij,1954

Ki,1954/Kj,1954

……

……

……

……

……



Question:请教这个新数据集怎么得到呢?

最佳答案

zhonghuijie 查看完整内容

不好意思,错了一个地方: set obs 1800 gen invest2=. gen mvalue2=. gen kstock2=. gen newid="" local k=1 forvalue i=1/200{ forvalues j=1/200{ if `i'!=`j'&year[`i']==year[`j']{ replace invest2[`k']=invest[`i']/invest[`j'] replace mvalue2[`k']=mvalue[`i']/mvalue[`j'] replace kstock2[`k']=kstock[`i']/kstock[`j'] replace newid="`i'by`j'" dis `k++' } } }
二维码

扫码加我 拉你入群

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

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

全部回复
2014-11-30 18:59:35
不好意思,错了一个地方:
set obs 1800
gen invest2=.
gen mvalue2=.
gen kstock2=.
gen newid=""
local k=1
forvalue i=1/200{
forvalues j=1/200{
if `i'!=`j'&year[`i']==year[`j']{
replace invest2[`k']=invest[`i']/invest[`j']
replace mvalue2[`k']=mvalue[`i']/mvalue[`j']
replace kstock2[`k']=kstock[`i']/kstock[`j']
replace newid="`i'by`j'"
dis `k++'
}
}
}
二维码

扫码加我 拉你入群

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

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

2014-12-2 19:25:32
你好,我做出一个程序如下:
set obs 1800
gen invest2=.
gen mvalue2=.
gen kstock2=.
gen newid=""
local k=1
forvalue i=1/200{
forvalues j=1/200{
if `i'!=`j'&year[`i']==year[`j']{
replace invest2[`k']=invest[`i']/invest[`j']
replace mvalue2[`k']=invest[`i']/invest[`j']
replace kstock2[`k']=invest[`i']/invest[`j']
replace newid="`i'by`j'"
dis `k++'
}
}
}
不知道可不可以运行,如果不能运行,希望你把数据发给我,我来调试。我的邮箱是812466144@qq.com
二维码

扫码加我 拉你入群

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

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

2014-12-3 16:14:34
复制代码
以上是zhonghuijie提供的代码,经验证准确无误!

二维码

扫码加我 拉你入群

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

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

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

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