楼主: Lee_iris
11154 11

[程序分享] 【手把手教你处理工企数据】低配版工企数据处理办法 [推广有奖]

教授

35%

还不是VIP/贵宾

-

威望
0
论坛币
1651 个
通用积分
1141.3311
学术水平
35 点
热心指数
42 点
信用等级
34 点
经验
2412 点
帖子
878
精华
0
在线时间
1378 小时
注册时间
2019-3-5
最后登录
2024-4-26

楼主
Lee_iris 在职认证  学生认证  发表于 2020-2-22 23:47:07 |只看作者 |坛友微信交流群|倒序 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
工企数据问题很多,处理起来比较繁琐,最近又搞了一次,一边整理一边发现问题,一步一步完善,两天也就做了两个年度的,希望是已经把所有的问题都遇到了,之后会顺畅些。
主要工作是清洗数据匹配城市行业,以及用类似excel数据透视表的功能加总到城市和行业
以下是总结,不一定完全合理,也没有完全按照聂辉华老师文章那样处理得很精确,不过也参考了一些比较权威期刊发表的文章,仅供参考。个人水平有限,有问题的话欢迎指正,若有其他解决方案也恳请赐教,共同进步。

一、导入数据到stata

从access格式导入stata,有帖子介绍过具体操作,参考:
https://bbs.pinggu.org/thread-3231726-1-1.html
https://bbs.pinggu.org/forum.php ... =#pid62774762Access
亲测无误
  1. odbc load, dsn("1999") table("qy99")  
复制代码
tips:命令中的("1999") 是在那个exe里命名的名称,("qy99")  是access打开以后左边框里的名称而不是access外面文件名的名称,要打开文件看看,确认一下

二、初步清洗数据

(一)指定目标路径
正式开始前可以先指定目标路径,也就是通过运行程序产生的文件放在哪里以及调用的文件放在哪里,命令如下:
  1. cd "E:\数据"
复制代码
tips:cd 后边跟路径,不一定必须加英文的双引号,有时候不加双引号也可以,不过加了保险些。路径可以打开文件夹右键看属性,然后复制过来。
(二)打开do文件记录命令
打开do文件记录命令也是一个不错的习惯,do文件写得差不多以后,可以从头再运行一遍,记录下结果,这时候可以用log的命令:
  1. log using filename,text replace
复制代码
结束时用:
  1. log close
复制代码
tips:log会产生记录的文件,记录下命令和结果,可以设置产生的文件格式,可以是txt文本也可以是网页,每一步都会被记录下来,所以感觉把do文件尝试得差不多了以后,最后再运行一遍,再记录,结果里面不会有太多有问题的步骤。以及每一次记录如果写同样的文件名,就会被代替,不过如果不加replace的option就打不开,所以每次命名要注意区分。
(三)筛选数据
下面正式开始筛选数据,相关标准很多,很多文章有介绍,被引最多的是(Brandt,2012;聂辉华,2012)这两篇,我在另一个帖子里有发过论文原文,参考:https://bbs.pinggu.org/thread-7387896-1-1.html
我这里只根据需要进行了几个关键变量的筛选,命令如下:
  1. keep if 固定资产合计 > 0
  2. keep if 工业总产值(不变价、新规定)> 0
  3. keep if 工业总产值(现价、新规定)> 0
  4. keep if 工业增加值  > 0
  5. keep if 工业销售产值(现价、新规定)> 0
  6. keep if 中间投入合计> 0
  7. keep if 全部职工> =30
  8. keep if 实收资本  > 0  
复制代码
tips:1.工企数据中每年的变量名称会有不同,比如工业总产值有的后面还有括号,所以很难批量循环处理,需要一个一个变量自己辨别,命令相应要修改。比如同样是工业总产值不变价,有的年份叫“工业总产值(不变价、新规定)”(1998、1999)有的年份叫“工业产值固”(2000),也有的叫“工业产值不”(2001);比如同样是港澳台资本金(1998、1999),2000年命名是“港澳台资本”,2001年甚至有错别字叫“港奥台资本”真的是醉醉的,要每年挨个儿对着选变量。2.关于标准,职工大于等于30是有在论文里看到,用来筛选规模以上企业,所以没有用大于等于8。3.注意,drop只能删掉小于的,删不掉空缺值,所以用keep if更方便,省得专门再删一次空缺值。
(四)删除无关变量
因为工企数据库里面的变量特别多,数据量也很多,动辄几十万,所以没用的变量建议删掉,或者直接只保留需要的变量,命令如下:
  1. keep 省地县码 行业类别 注册类型 全部职工 工业总产值(不变价、新规定) 工业总产值(现价、新规定) 工业销售产值(现价、新规定) 工业增加值 固定资产合计 实收资本 港澳台资本金 外商资本金
复制代码
(五)适时保存数据
记得适时保存数据,但不要时时保存,因为stata不像excel可以随时Ctrl+Z,stata里面错一步就要重新来,所以小心了。
  1. save "E:\数据\1999【step1】初步清理.dta",replace
复制代码
三、匹配城市

(一)重命名加标签
因为工企数据库里变量名称是汉字,在stata里虽然能导入,但是不便于进行后续的运算,所以还是把涉及运算的变量改名字,顺便label标记备注一下,要不改到最后都乱了。这里列几个关键变量,一是便于后续理解,二是给个示范。
  1. rename 省地县码 xingzhengdaima  
  2. rename 全部职工 congye
  3. rename 工业总产值(不变价、新规定)  zongzhi
  4. rename 工业增加值  zengjia
  5. rename 实收资本 shishou
  6. label variable xingzhengdaima "行政区划代码6位"
复制代码
(二)统一匹配变量的格式
用来匹配的变量格式和名称应该是相同的,比如我这里用行政区划匹配城市名称,行政区划的变量在匹配的文件和被匹配的文件里应该有相同的命名,我这里是xzdaima1,也有相同格式,即数字型。
我只用地级市数据,所以只取原来字符串型数据xingzhengdaima 的前四位,新变量命名为xzdaima,又因为在另一个文件里行政代码的变量为数字型, 所以这里将字符串型数据转为数字型,然后命名为xzdaima1,和匹配过来的那个文件里的变量名以及数据类型一致。
  1. gen xzdaima= substr( xingzhengdaima,1,4)
  2. /// 行政区划代码为字符串型数据,如果为数字格式先用tostring转为字符串,然后取行政区划代码前四位
  3. destring xzdaima , generate(xzdaima1)
  4. ///把行政代码转为数字类型
复制代码
tips:之所以不用数据库里的城市是因为有些年份压根没有登记城市,或者登记的名称都不统一,有的有“市”有的没有“市”甚至有的名字错误,所以用匹配相对好些,但是也有问题,就是行政区划代码每年多少有变动,如果不统一对应到一个固定的对照表的话,就会有很多匹配不上的。这个行政代码和城市名称的对应表就要自己做了,如果用县级数据或是地级市数据,在研究年份中有行政级别调整的城市就可以剔除了,比如从县级市到地级市的。关于撤县建市等行政区划调整问题可以参考:https://bbs.pinggu.org/thread-7801095-1-1.html
(三)匹配城市
然后是关键一步,用merge命令合并,这里是m:1,多对一,因为企业很多,但城市就那么几百个。关于匹配就不多说了,网上有很多资源可以学习。
  1. merge m:1 xzdaima1 using "E:\数据\行政区划代码匹配表.dta"
复制代码
tips:这个行政区划代码匹配表没有太合适的,自己做也还是有点瑕疵,不够合理,这里就不分享了。
(四)删除没匹配上的企业
  1. drop if _merge==1|_merge==2
  2. drop _merge
复制代码
tips:因为这个匹配表还是有些问题,如果不对每年的数据分别做一个对照表,也很难完全匹配上,所以其实删一些也没关系,删个一万多条数据都OK,毕竟占比很少。

四、匹配行业

和匹配城市一样,行业也有很多标准,有几版,所以行业代码也有所不同,需要对应,这个对应也得自己做。步骤和上一步差不多。
(一)重命名
  1. rename 行业类别 hangyedaima
复制代码
(二)统一匹配变量的格式
  1. destring hangyedaima , generate(daima2002)
复制代码
(三)匹配行业
  1. merge m:1 daima2002 using "E:\1998-2002行业代码匹配表.dta"
复制代码
(四)删除没匹配上的企业
  1. drop if _merge==1|_merge==2
  2. drop _merge
复制代码
(五)适时保存数据
  1. save "E:\Hurry Up\长三角扩容与产业升级\数据\1999【step2】匹配城市行业.dta",replace
复制代码
待续
二维码

扫码加我 拉你入群

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

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

关键词:工企数据库 数据透视 stata 分类汇总 匹配

已有 1 人评分学术水平 热心指数 信用等级 收起 理由
Sunknownay + 3 + 3 + 3 鼓励积极发帖讨论

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

沙发
Lee_iris 在职认证  学生认证  发表于 2020-2-23 10:52:00 |只看作者 |坛友微信交流群

五、分类汇总

下面一步就是分类汇总,我想要的数据是每个城市(变量为quhua)所有企业 zongzhi xiaoshou zengjia shishou congye这些变量的加总,命令如下:
  1. tabstat zongzhi xiaoshou zengjia shishou congye, by(quhua) stat(sum)
复制代码
但是这样的结果是显示在结果框里,不能进行下一步运算,所以要把结果导出到文件里,命令如下:
  1. logout, save(1999op) replace: tabstat zongzhi xiaoshou zengjia shishou congye , by(quhua) stat(sum) nototal
  2. logout, save(1999op) dta replace: tabstat zongzhi xiaoshou zengjia shishou congye, by(quhua) stat(sum) nototal
复制代码
Tips:1.logout可以导出excel、Word、dta、txt格式的结果,不过我都试了下,excel、Word导出以后格式有误,会乱码甚至打不开,可能是版本的原因。2.dta导出以后不是正常数据的变量名和数据,而是和txt导出一样的格式,里面有抬头和横线之类的,也不能直接处理,还是要复制到excel里处理。如果不是数据量大excel处理起来很卡的话,直接在excel里做数据透视表也是一种办法。也有可能有更优解。3.dta和txt导出都有个问题,就是分类的数据可能有长度限制,比如我按区划的名称分类了,旁边区划的名称有的很长,导出结果里只有“克孜勒苏柯尔克孜”,而不是原来的名称“克孜勒苏柯尔克孜自治州”,导致最后匹配的时候和原先的行政区划匹配表对不上,要手动调整。4.当然也有解决方案,比如在行政区划匹配表里加上一个自然序列编号,匹配区划的时候连编号匹配上,这样结果出来不会有长度问题和整理面板时匹配不上名称的问题,但是在tabstat的时候就看不到名称了,不过这也不是大问题。5.具体命令的option和语句,help一下,help不到就search、findit,ssc install安装一下,有时候网不好可能一下还找不到,可以再输一次命令试试。

关于工企数据库的匹配,论坛有帖子说得很详细,推荐一下:
小白VS中国工业企业数据库(1):数据类型转化
https://bbs.pinggu.org/forum.php ... mp;from^^uid=11374248
小白VS中国工业企业数据库(2):数据匹配前处理
https://bbs.pinggu.org/forum.php ... mp;from^^uid=11374248
小白VS中国工业企业数据库(3):年内匹配
https://bbs.pinggu.org/forum.php ... mp;from^^uid=11374248
小白VS中国工业企业数据库(4):相邻两年间的匹配
https://bbs.pinggu.org/forum.php ... mp;from^^uid=11374248
小白VS中国工业企业数据库(5):相邻三年间的匹配
https://bbs.pinggu.org/forum.php ... mp;from^^uid=11374248
小白VS中国工业企业数据库(6):生成最终十年的非平衡面板数据
https://bbs.pinggu.org/forum.php ... mp;from^^uid=11374248
小白VS中国工业企业数据库(7):生成可用面板数据
https://bbs.pinggu.org/forum.php ... mp;from^^uid=11374248

使用道具

藤椅
Lee_iris 在职认证  学生认证  发表于 2020-8-13 12:15:22 |只看作者 |坛友微信交流群
如果在第一步导入数据时,发现电脑里没有MS Access Driver ,需要去Microsoft官网下载accessdatabase engine 驱动,见附件,X64是64位的,另一个应该是32位的。
应用程序发不了附件,只能附上下载地址:
https://www.microsoft.com/en-us/download/details.aspx?id=54920


使用道具

板凳
zhouershimei 发表于 2020-10-6 14:23:28 |只看作者 |坛友微信交流群
太赞了!!

使用道具

报纸
2019liuhq 发表于 2020-10-22 09:08:00 |只看作者 |坛友微信交流群
最近刚好用到,感谢楼主分享!

使用道具

地板
Lee_iris 在职认证  学生认证  发表于 2020-12-13 19:32:18 |只看作者 |坛友微信交流群
Lee_iris 发表于 2020-2-23 10:52
五、分类汇总

下面一步就是分类汇总,我想要的数据是每个城市(变量为quhua)所有企业 zongzhi xiaosh ...
这里目前发现可以直接在stata里处理加总和相乘相除之类的,不用导出来

使用道具

7
晶晶曾 发表于 2020-12-15 16:59:57 |只看作者 |坛友微信交流群
感谢楼主 !!

使用道具

8
象上进 发表于 2020-12-26 10:26:48 |只看作者 |坛友微信交流群
请问楼主,匹配的时候每年的变量需要完全相同吗,是否可以存在某一年没有某个变量但是其他年份有

使用道具

9
Lee_iris 在职认证  学生认证  发表于 2020-12-26 13:05:46 |只看作者 |坛友微信交流群
象上进 发表于 2020-12-26 10:26
请问楼主,匹配的时候每年的变量需要完全相同吗,是否可以存在某一年没有某个变量但是其他年份有
不需要,没有的值大概会变成.
注意一下到底是1:m还是m:1或者m:m

使用道具

10
象上进 发表于 2021-1-8 09:41:44 |只看作者 |坛友微信交流群
Lee_iris 发表于 2020-12-26 13:05
不需要,没有的值大概会变成.
注意一下到底是1:m还是m:1或者m:m
感谢楼主解答

使用道具

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

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

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

GMT+8, 2024-4-27 18:38