楼主: nuomin
3238 0

[回归分析求助] STATA数据集导出到数据库的一个小问题:行太大 [推广有奖]

  • 8关注
  • 61粉丝

版主

已卖:573份资源

院士

34%

还不是VIP/贵宾

-

TA的文库  其他...

Lisp

计量模型入门与精通

威望
1
论坛币
170716 个
通用积分
8029.6016
学术水平
207 点
热心指数
257 点
信用等级
151 点
经验
878 点
帖子
2429
精华
0
在线时间
4069 小时
注册时间
2005-11-15
最后登录
2025-11-15

初级热心勋章 中级热心勋章 初级信用勋章

楼主
nuomin 发表于 2016-12-30 19:12:37 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币

行太大是什么意思?


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

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

  1. The ODBC driver reported the following diagnostics
  2. 错误:行太大:尺寸 10240, 最大值 8160;
  3. Error while executing the query
  4. SQLSTATE=54000
复制代码

   这里的行太大是什么意思?按以往的经验,这种翻译后的报错信息是不能完全按字面意思理解的。搜索错误码也搜不到有用信息。我对行太多的第一个猜测是字段数太多,超过了设置上限。有些数据库的表对字段数量是有限制的,比如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函数,完成数据集的分割导出。


  1. desc ,n /* 利用这个函数查看变量名及所处位置*/
  2. keep var1 – var2  /* 选择变量var1到变量var2的数据集,总数控制在了800,这是上半部分*/
  3. dsn  ... /*将上半部分数据集导出到数据库*/
  4. keep var1 var3 – var4 /* 选择变量var1,var2之后的var3到的数据集的最后一个变量var4,这是下半部分*/
  5. dsn  ...  /*将下半部分数据集导出到数据库*/
复制代码

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


结论

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




二维码

扫码加我 拉你入群

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

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

关键词:STATA数据 Stata tata 数据集 数据库 数据库

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

本版微信群
加好友,备注jltj
拉您入交流群
GMT+8, 2026-1-23 03:04