全部版块 我的主页
论坛 计量经济学与统计论坛 五区 计量经济学与统计软件 Stata专版
3128 0
2016-12-30

行太大是什么意思?


   开始分析工作之前需要把Stata数据集导出到数据库。最简便的方式是利用STATA自带的导出到ODBC数据源的功能。通常数据处理软件自带的导出功能是好用的,建表和字段定义是同时完成,省却大量的时间。导出功能在STATA13里有了很大的进步。这次的数据集有1227个字段,3万多条记录,大小有370MB。我设置好数据库和ODBC之后,使用STATA将数据集导入到内存。

   在导出到数据库时,STATA给我返回了报错信息:

复制代码

   这里的行太大是什么意思?按以往的经验,这种翻译后的报错信息是不能完全按字面意思理解的。搜索错误码也搜不到有用信息。我对行太多的第一个猜测是字段数太多,超过了设置上限。有些数据库的表对字段数量是有限制的,比如MySQL就限制到1000个字段,PostgreSQL的限制为1664个字段。因而猜测这个报错不是数据库发出的。第二个猜测是行数太多。我把导出的数据集减少到几百行,报错依然存在。第三个猜测是每行数据长度有上限。这个以前没有遇到过,所以没有往这方面寻找解决方法。


想到的第一个解决方法:更改ODBC设置


   猜测报错信息是由微软ODBC发的信息。想到解决方法为更改ODBC的设置,提高上限。挂VPN上不存在的网站没有搜索到如何改变ODBC设置的信息。遂放弃这一方法。


想到的第二个解决方法:绕过STATA的ODBC Driver


打开数据库之后可以看到新建的表,里面的1227个字段以及定义都设置好了,但是没有数据记录,是空表。这时还是认为是STATA的ODBC Driver的设置上限问题。一个方法是用PostgreSQL数据库的ODBC Driver导出数据。利用R语言包“readstata13”提供的函数将数据集读入内存,利用“RPostgreSQL”包提供的函数数据导chu 到数据库。当进行到一半的时候报错数据类型不匹配。根据以往的经验,检查类型并修正将是一个漫长的过程,遂放弃。


想到的第三个解决方法:在STATA中分割数据集


   转回STATA后,看到坛友留言说把数据集分成两部分,也想试试这一思路。刚开始纠结如何将数据集分成两部分的方式。在挂VPN在并不存在的网站上搜索时看到可以用“-”表示STATA里的变量(等同于数据库里的字段,R语言里的列)范围,觉得已经集齐了全部工具。我利用以下STATA函数,完成数据集的分割导出。


复制代码

   通过这样的方式将数据集分成两部分成功导出到了数据库中。在PostgreSQL数据库中分别存放两张表。单张表的STATA13(Version 60)的数据格式还是蛮强大的。


结论

   回到的最初的报错:行太大,其真实意思是一行所占的字符太大(后期查到的英文是 row too big)。在STATA ODBC Driver里允许最大值为8160字符。数据库PostgreSQL的行大小限制也是8160个字符。因而,这个有可能是SQL标准或者可能是PostgreSQL的限制。另外,STATA ODBC Driver的最大字段数是1500个,这是在导出其他数据集时发现的。




二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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