全部版块 我的主页
论坛 计量经济学与统计论坛 五区 计量经济学与统计软件 Stata专版
4288 3
2011-09-07
悬赏 10 个论坛币 已解决
do文件:
clear //相当于让STATA 处于初始状态,清除所有使用过的痕迹
version 9 //由于不同版本命令等略有不同,因此最好事先指明版本号
cd D:\mi\
capture log close /*如某结果输出文件已被打开,则关闭之,
若没有,则忽略该命令*/
log using myfile.txt,text replace //将运行结果存到一个输出文件 myfile 中
set more off //在程序执行过程中,不要因为结果窗口屏幕已满而停下来
foreach file in 40{
insheet using "`file'.csv", clear /*修改csv文件*/
drop in 1
rename v1 prov
local i=2
local j=1997
while `i'<=12{
rename v`i' x`j'
local ++i
local ++j
}
reshape long x ,i(prov) j(year)
set obs 341
gen id=_n
order id
rename x score`file'
save `file',replace/*修改文件名*/
/*以上是csv转换成dta的程序*/
}

. foreach file in 40{
  2. insheet using "`file'.csv", clear /*修改csv文件*/
  3.
. drop in 1
  4. rename v1 prov
  5. local i=2
  6. local j=1997
  7. while `i'<=12{
  8. rename v`i' x`j'
  9. local ++i
10. local ++j
11. }
12.
. reshape long x ,i(prov) j(year)
13.
. set obs 341
14. gen id=_n
15. order id
16. rename x score`file'
17. save `file',replace/*修改文件名*/
18. /*以上是csv转换成dta的程序*/
.
. }


窗口报错
(12 vars, 32 obs)
(1 observation deleted)
(note: j = 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007)
x2000 type mismatch with other x variables
r(198);

end of do-file
原数据是这样的:地区 1997 1998    ……2007
我想读到stata中变成面板形式:地区        年份   变量   
                                    bj         1997   
                                     。。。。。。
                                     bj         2007
                                      tj         1997
请高手帮我试试,为什么老出错,以下是数据,由于不能上传cav格式,就转换成xls了
40.xls
大小:(20.5 KB)

 马上下载










最佳答案

jzhyue 查看完整内容

要求所有的reshape对象为同一数据类型,1997-1998三个变量由于含有字符串NA在导入时作为字符型变量,解决办法就是将原数据中的NA换成.或在 之前加上destring x*,replace force
二维码

扫码加我 拉你入群

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

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

全部回复
2011-9-7 10:43:07
reshape long x ,i(prov) j(year)
要求所有的reshape对象为同一数据类型,1997-1998三个变量由于含有字符串NA在导入时作为字符型变量,解决办法就是将原数据中的NA换成.或在
reshape long x ,i(prov) j(year)
之前加上destring x*,replace force
二维码

扫码加我 拉你入群

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

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

2011-9-7 12:38:27
foreach file in 40{
insheet using "`file'.csv", clear /*修改csv文件*/
为什么要用
foreach file in 40{
呢?
可以将下列代码
foreach file in 40{
insheet using "`file'.csv", clear /*修改csv文件*/
drop in 1
rename v1 prov
local i=2
local j=1997
while `i'<=12{
rename v`i' x`j'
local ++i
local ++j
}
reshape long x ,i(prov) j(year)
set obs 341
gen id=_n
order id
rename x score`file'
save `file',replace/*修改文件名*/
/*以上是csv转换成dta的程序*/
}
简化为
loca file  40
insheet using "`file'.csv", clear  n /*修改csv文件*/
rename v1 prov
forva i=2/12{
loca lbl:var lab v`i'
ren v`i' score`file'`lbl'
}
destring score`file'*,replace force
reshape long score`file' ,i(prov) j(year)
gen id=_n
order id
save `file',replace/*修改文件名*/
/*以上是csv转换成dta的程序*/


二维码

扫码加我 拉你入群

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

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

2011-9-7 14:10:05
jzhyue 发表于 2011-9-7 12:38
为什么要用

呢?
谢谢指教!
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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