按年份索引
按国、省、市索引
综合索引
-->
返回列表
提升主题| 本版置顶| 关闭主题| 变更主题颜色| 抢沙发| 顶贴| 显身卡| 道具中心
楼主: liuyangclick
27538 41

[数据软件处理] 小白VS中国工业企业数据库(1):数据类型转化   [推广有奖]

博士生

50%

还不是VIP/贵宾

-

威望
0
论坛币
11737 个
通用积分
89.8317
学术水平
66 点
热心指数
73 点
信用等级
59 点
经验
4683 点
帖子
173
精华
0
在线时间
387 小时
注册时间
2007-6-3
最后登录
2024-2-5

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
  作为一个跨专业过来的小博,感觉与专业学经济出身的同学差距挺大的,很多东西都得下工夫补上。  这不,为了写毕业论文,入手了一套98-07的中国工业企业数据库,利用这个暑假打算将数据库整理好,以便以后的写作随时调用。作为一个小白,计量软件只会STATA,并且是很简单的回归应用,只能看懂小部分简单程序,想要入手这套数据库虽然已经做好心理准备,但困难却超出了预期。我将工作分为了三个阶段:  第一个阶段:数据转化成DTA格式,我只会STATA
  第二个阶段:数据重复值、缺省值等的处理和数据匹配等数据加工
  第三个阶段:用数据计算出回归可用的各种变量,例如集聚度、全要素生产率等等。
  当我完成每个阶段,我计划将自己处理过程分享一下,虽然不知道自己会卡在那个过程。
  先说说手头的数据和工具:  数据:ACCESS格式的工业企业数据库
  工具:STATA.14
  电脑配置:I5-5200U,2.2GHZ,4G
  第一阶段问题:将数据库转化成能输入STATA的DTA格式

  (1)首先想到的是STAT TRANSFER这个软件,然后下载了STAT TRANSFER9,免安装的,但跑完发现这个版本不能转化汉字,汉字转化出来基本就是乱码。因此选择最新的STAT TRANSFER12,但转化的时候发现要处理的每年的数据样本在16万-33晚之间,超出了这个软件的处理上限,然后用这个软件转化的可能性算是没有了。
  (2)再次想到的方法是复制黏贴的方法,发现ACCESS不能直接往STATA里粘贴,于是新建EXCEL,在数据里导入ACCESS,发现用WPS可以很完整的将其导入EXCEL,这样就将ACCESS转化成了EXCEL,然后再往STATA复制黏贴,1999-2004可以很好的粘贴进STATA,但2005-2007则出现了数据样本凭空多出来10-50个样本,后来发现,原来是粘贴进STATA时候,有的数据样本被分成了两行,产生了数据错位,考虑到数据的完整性,这种方法也否决了。
  (3)看论坛上说可以转化成CVS或者XML格式然后倒入STATA,于是从EXCEL格式转化成这两种格式的表格,然后再STATA里导入,发现CVS格式可以很快的完成,但汉字部分无法转化,是乱码;而XML格式一点击导入,则出现软件没反应,根本跑不动,将电脑开着一天也还是没反应,以为电脑太差,于是去电脑装配店用I7-7700K,16G的电脑跑,一个多小时依旧纹丝不动。看来这两种方法也废了。
  (4)最后只好将2005-2007年的数据以EXCEL格式导入STATA,但被提示最大只能一次性导入40M的数据,没办法,只好将数据分割成小于40M的几个表格,分别导入转化成DTA格式,然后将每个样本生成一个id,用以下MERGE命令合并起来:
  merge 1:1 id using filename.dta,force
  合并以后很多变量类型会变成STRING格式,然后利用destring命令转化回来,检查了各年样本数量,与ACCESS格式是一致的,用LIST命令抽查三段每段100个样本的数据,发现没错误,觉得输入应当没有错误了。值得注意的是,STATA14可以识别汉字的变量,因此分表格时候可以直接复制汉字变量就可以了。
  至此,第一阶段算是完成了,前后由于中间有很多琐事,用了一周的时间。

二维码

扫码加我 拉你入群

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

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


回帖推荐

xixizzx 发表于2楼  查看完整内容

可以用odbc命令直接导入大型access文件
已有 3 人评分学术水平 热心指数 信用等级 收起 理由
Stakiny + 3 + 3 + 3 鼓励积极发帖讨论
日新少年 + 2 + 2 + 2 精彩帖子
txje + 2 + 2 + 2 鼓励积极发帖讨论

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

本帖被以下文库推荐

依旧执着,但已渐淡如烟。
沙发
xixizzx 发表于 2017-8-4 00:22:14 |只看作者 |坛友微信交流群
可以用odbc命令直接导入大型access文件
已有 2 人评分论坛币 学术水平 热心指数 收起 理由
猫小小siyu + 1 + 1 精彩帖子
客初 + 20 + 3 精彩帖子

总评分: 论坛币 + 20  学术水平 + 1  热心指数 + 4   查看全部评分

使用道具

藤椅
liuyangclick 学生认证  发表于 2017-8-4 19:35:57 |只看作者 |坛友微信交流群
xixizzx 发表于 2017-8-4 00:22
可以用odbc命令直接导入大型access文件
ODBC命令是这个方法吗?http://blog.sina.com.cn/s/blog_9b1b494a0102v4cp.html

使用道具

板凳
liuyangclick 学生认证  发表于 2017-8-4 19:36:43 |只看作者 |坛友微信交流群
xixizzx 发表于 2017-8-4 00:22
可以用odbc命令直接导入大型access文件
ODBC命令是这个方法吗?http://blog.sina.com.cn/s/blog_9b1b494a0102v4cp.html

使用道具

报纸
kevinjxufe 发表于 2017-8-17 11:05:37 |只看作者 |坛友微信交流群
请问一下2003行业代码进行过调整,之前与之后的代码不同,你是如何处理呢?

使用道具

地板
liuyangclick 学生认证  发表于 2017-8-17 18:39:53 |只看作者 |坛友微信交流群
kevinjxufe 发表于 2017-8-17 11:05
请问一下2003行业代码进行过调整,之前与之后的代码不同,你是如何处理呢?
根据变更的内容(例如12年的这次:https://wenku.baidu.com/view/630490113c1ec5da50e27053.html),将03年前行业代码改变的行业代码更改为03年后的代码,其他不变。这部分我是手动完成的,所以没写代码。可以在代码里插入这样一段:
destring cic,replace
gen f=cic
if year<2003{
  replace f=新代码1 if cic==旧代码1
  replace f=新代码2 if cic==旧代码2
  .
  .
  replace f=新代码n if cic==旧代码n
}
drop f
rename f cic
tostring cic replace

使用道具

7
kevinjxufe 发表于 2017-8-18 16:09:35 |只看作者 |坛友微信交流群
非常感谢!不过还是有点不明白。我想确认一下,是把新代码和旧代码分别列出两列,然后用每个企业代码和所有旧代码进行比较,然后符合条件的情况,用新代码进行替换?我看到了Brandt有个代码提到如何替换行业代码
*gen cic = cic_adj
        *replace cic = real(industry_code) if cic == .
        /*
        if year <2003{
                gen cic = cic_adj
        }
        else{
                gen cic = cic03
        }
不知道这和你的方法是否相同呢?他这里的replace cic = real(industry_code) if cic == . 是指什么呢?
再次感谢您的耐心回复!

使用道具

8
kevinjxufe 发表于 2017-8-18 16:14:57 |只看作者 |坛友微信交流群
我还想问一下,您最后匹配出来的样本有多大呢(多少个观测值)?还需要查是否有重复的观测值吗?

使用道具

9
liuyangclick 学生认证  发表于 2017-8-18 16:32:58 |只看作者 |坛友微信交流群
kevinjxufe 发表于 2017-8-18 16:14
我还想问一下,您最后匹配出来的样本有多大呢(多少个观测值)?还需要查是否有重复的观测值吗?
匹配数据不同,最后匹配出的样本在45-65万左右(没有年份)

使用道具

10
kevinjxufe 发表于 2017-8-18 16:55:12 |只看作者 |坛友微信交流群
嗯,非常感谢!不过还是有点不明白。我想确认一下,是把新代码和旧代码分别列出两列,然后用每个企业代码和所有旧代码进行比较,然后符合条件的情况,用新代码进行替换?我看到了Brandt有个代码提到如何替换行业代码
*gen cic = cic_adj
         *replace cic = real(industry_code) if cic == .
         /*
         if year <2003{
                 gen cic = cic_adj
         }
         else{
                 gen cic = cic03
         }
不知道这和你的方法是否相同呢?他这里的replace cic = real(industry_code) if cic == . 是指什么呢?
再次感谢您的耐心回复!

使用道具

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

本版微信群
加JingGuanBbs
拉您进交流群

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

GMT+8, 2024-4-20 09:06