全部版块 我的主页
论坛 计量经济学与统计论坛 五区 计量经济学与统计软件 Stata专版
8518 22
2012-12-05
各位好,
我是rookie,在world bank的data bank里下载了Data set:
平板panel数据(cross section + time):

country (10) variables(20) year (20)

每一国家有20个变量, 每个变量有20个值(按年份)
基本是wide的
参见附件:
big.xls
大小:(88.5 KB)

 马上下载



如果一个变量一个变量地reshape long var, i(...) j(...)
很麻烦,有没有便捷一点的方法?

用个循环?
先变量名都整理出来,然后每次keep if var="变量名"
一个个单独存成一个tab`i'.dta
keep if var=="varname"
save tab1.dta
br
foreach i of numlist 3/25{
        rename v`i' varname`i+1975'
}
drop var
reshape long varname, i(id) j(year)
* 年份是从1990-2012, 原来有
foreach i of numlist 3/25{
        replace year=1985+`i' if year==`i'
}
label var varname "indicator name"

想是把上述步骤,做成个循环。
之后, merge
use tab1.dta,clear
foreach i of numlist 2/10 {
        merge 1:1 id year using tab`i'.dta
        drop _merge
}

save work.dta

有没有办法把那些个变量名(重新起名字)和标签名(原变量名)分别存在两个向量里,然后loop的时候,按着index提取。

或者Stata 有没有做类似事情的ado-file?或是有没有相关帖子?

各位一般都怎么搜集、整理数据呢?

麻烦各位答疑解惑,先谢谢了。

二维码

扫码加我 拉你入群

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

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

全部回复
2012-12-5 04:21:58
clear
insheet using C:\Users\Desktop\big.csv, names c

sort id var
egen vargp=group(var)

foreach i of numlist 3/25{
local j=2015-`i'
rename v`i' varname`j'
}

reshape long varname,i(id var) j(year)

drop var

reshape wide varname,i(id year) j(vargp)



rename varname1 ..................
..............
//now the data is ready for panel analysis



二维码

扫码加我 拉你入群

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

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

2012-12-6 10:41:27
reshape long varlist(20个变量的列表), i(country) j(year)

country要先转换为数字格式,可用encode
二维码

扫码加我 拉你入群

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

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

2012-12-7 06:08:31
大白菜2012 发表于 2012-12-5 04:21
clear
insheet using C:\Users\Desktop\big.csv, names c
非常感谢。

发帖后,我用循环整理了一个*.dta,方法就是一个一个变量分着做,每次重新引用big.csv,然后keep if var=="age dependency rate..." 这么着做完之后rename+label的。
你的group函数相当便捷, 还有这套wide-> long -> wide (j用vargp)真是通透啊!

最后rename那里想做些改善:
如果可以把一开始的var变量里的不同值提取出来存在一个(临时)向量(label)里;
然后在label的基础上,生成一个(变量名称缩写)的向量,叫acronym,
也就是说,需要一个指令能够执行提取字串中每个单词首字母的功能,
(不知道有没有Stata用户编写的类似命令,即String系列指令)。

好,现在就是生成了2个(临时)向量: label, acronym

drop var
reshape wide v, i(id year) j(vargp)

在最后就可以做个循环,用label给变量v1-v20加标签,然后再用acronym给v1-v20重命名,但是一些对应的指令不知道
foreach i of numlist 1/20{
  label var v`i' "label"  %% 意会,中括号[]里面为索引
rename v`i' acronym %% 意会,不知道正确的指令怎么写
}

save done.dta,replace


在R里面提取不同值的指令是unique(),不知道Stata有没有类似的,或是自己编一个,利用标量——_n,_N ?
尝试了一下提取distinct values of a variable:
bysort var: gen nvals=_n==1
encode var, gen(varnum) %% transform strings to numeric type
mkmat varnum if nvals==1, nomissing matrix(label)
svmat label
结果就错了存进矩阵的字串全变成数字了,即1,……,20,就这20个,其它为.(missing values)
有啥办法没?
二维码

扫码加我 拉你入群

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

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

2012-12-7 11:24:00
monstersivle 发表于 2012-12-7 06:08
非常感谢。

发帖后,我用循环整理了一个*.dta,方法就是一个一个变量分着做,每次重新引用big.csv,然 ...
需要一个指令能够执行提取字串中每个单词首字母的功能,
(不知道有没有Stata用户编写的类似命令,即String系列指令)。


-----------no
二维码

扫码加我 拉你入群

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

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

2012-12-7 11:28:04
monstersivle 发表于 2012-12-7 06:08
非常感谢。

发帖后,我用循环整理了一个*.dta,方法就是一个一个变量分着做,每次重新引用big.csv,然 ...
在最后就可以做个循环,用label给变量v1-v20加标签,然后再用acronym给v1-v20重命名,但是一些对应的指令不知道
foreach i of numlist 1/20{
  label var v`i' "label"  %% 意会,中括号[]里面为索引
rename v`i' acronym %% 意会,不知道正确的指令怎么写
}





---------不要用循环,因为变量名都是不一样的。才20个变量,copy,paste,花不了多久
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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