【问题标题】:Warning / Error when Importing a .sav导入 .sav 时出现警告/错误
【发布时间】:2011-12-03 06:04:37
【问题描述】:

我有两个版本的 SPSS 在工作。在 Windows XP 上运行的 SPSS 11 和在 Linux 上运行的 SPSS 20。 SPSS 的两个副本都可以正常工作。使用任一版本的 SPSS 创建的文件可以在其他版本的 SPSS 上正常打开。 IE。 - 我可以在 Linux 上使用 SPSS 20 创建一个 .sav 文件,然后在 Windows 上的 SPSS 11 上打开它而不会发生意外。

但是,如果我使用 SPSS 20 创建一个 .sav 文件并将数据导入 R 或 PSPP(在 Linux 上),我会收到一堆警告。数据似乎可以正确导入,但我担心这些警告。从 SPSS 11 或其他已发送的 .sav 文件导入 .sav 时,我没有看到任何警告。我公司的许多分析师都使用 SPSS,所以我从不同版本的 SPSS 中获得了 SPSS 文件,而我以前从未见过这个警告。 PSPP 和 R 之间的警告消息几乎相同,这是有道理的。 AFAIK,他们使用相同的底层库来导入数据。这是 R 错误:

Warning messages:
1: In read.spss("test.sav") :
test.sav: File-indicated value is different from internal value for at least one of  the three system values.  SYSMIS: indicated -1.79769e+308, expected -1.79769e+308; HIGHEST: 1.79769e+308, 1.79769e+308; LOWEST: -1.79769e+308, -1.79769e+308   

2: In read.spss("test.sav") :
test.sav: Unrecognized record type 7, subtype 18 encountered in system file

.sav 文件非常简单。它有两列,哑和哑。两者都是整数。前两个包含两个值 1.0。第二行包含两个值 2.0。我可以根据要求提供文件(我看不到任何上传到 SO 的方法)。如果有人想查看实际文件,请 PM 我,我会发送给您。

dumb  dumber
1.0   1.0
2.0   2.0

想法?任何人都知道在邮件列表中不被活生生烤死的情况下提交针对 R 的错误的最佳方法吗? :-)

编辑:我在标题行中使用了“错误”一词。我会离开它,但我不应该使用这个词。下面的 cmets 正确指出我看到的消息是警告,而不是错误。然而,我确实认为这在上述问题的正文中已经明确。显然,SPSS 数据格式随着时间的推移发生了变化,而 SPSS/IBM 未能记录这些变化,这是问题的根源。

【问题讨论】:

  • 没有真正的洞察力,但可以呼应每次我从 SPSS 导入 R 时都会收到一连串这些警告的情绪。如果它让你感觉更好,我不科学的手册会检查 b/t R 和SPSS一直显示数据导入没有错误。我希望我们能对此有所了解!
  • 我很高兴听到您看到的数据似乎已正确导入。我的问题是我不能承受错误,并且处理日期的东西已经够棘手了,我不想因为这个警告可能告诉我们而冒任何错误的风险。我不能告诉我的老板我的交叉表有点偏离,因为我使用的是 R 而不是 SPSS。这些天再找一份工作太难了。 :-)
  • 虽然我对您的 cmets 对 R 列表的刻薄表示同情,但我也同意其他评论者的观点,即将此视为 R 中的错​​误是不公平的。R 正在尽其所能,并警告您可能有问题。我认为,如果您想尝试自己修复/诊断此问题,则必须非常熟悉调试 R 代码的 C 组件。首先跟踪 C 代码中的特定行(即 sfm-read.c 的第 585 行)。弄清楚它是什么函数(read_machine_flt64_info),然后对...进行源码级调试
  • (to) 在该函数中设置断点,并在读取相关文件时单步执行。 (我认为您需要 R 扩展手册来获取此信息。)如果您没有准备好执行此操作(即设置了调试环境并熟悉 C 代码的源代码级调试),这将是一个艰难的跋涉。但是,我认为您没有太多选择-您可以(1)深入研究并尝试自己解决[而且我确实认为,如果您在解决问题时遇到麻烦,您会遇到R开发名单上的积极接待...]; (2) 聘请顾问:
  • (3) 学会接受警告。

标签: r spss


【解决方案1】:

这不是错误消息。这只是一个警告。 SPSS 拒绝记录他们的文件格式,因此人们没有动力通过逆向工程来追踪新“子类型”的结构。没有办法提交错误报告而不被烤,因为没有错误....除了封闭格式之外,应该向 SPSS 的所有者提交错误投诉!

编辑:R-Core 是一个志愿者团体,非常重视它的责任。它付出了巨大的努力来追踪任何影响系统稳定性或产生错误计算的东西。如果您愿意对 R 的作者多一点尊重,并建议在 R-devel 邮件列表上进行合作以找出解决这个问题的方法,而不使用“bug”一词,那么您会引起更少的敌意。可能有人愿意查看一个简单的 .sav 文件(例如您构建的文件)是否可以在十六进制显微镜下检查,以识别被误认为是另一个无限负值的无限负值。大多数 R-Core 没有 SPSS 的工作副本。

您可以提供此链接作为其他尝试对 SPSS .sav 格式进行逆向工程的产品的示例:

http://svn.opendatafoundation.org/ddidext/org.opendatafoundation.data/references/pspp_source/sfm-read.c

编辑:2015 年 4 月;我在?read.spss 帮助文件中看到了一个最近添加到 pkg:memisc 的内容:“memisc 包中提供了基于 PSPP 代码库的不同接口:请参阅其对 spss.system.file 的帮助。”我已经成功地(一次)在最新版本的 SPSS 创建的文件上使用了该包的功能。

【讨论】:

  • 我知道根本问题是 SPSS 的文件格式。我只想确保数据将毫无错误地导入,或者如果有可能出错,那是什么。而且,错误地,我的意思是任何导入的数据可能与我根据 SPSS 中数据的外观和 read.spss() 中使用的设置的直观预期不同的情况。我在企业环境中使用 R。讨论 GPL 的复杂性以及如果分析与我的客户失控,为什么它不是 R 的错,这不是我想做的事情。
  • 我不愿意在 R 邮件列表中讨论这个问题是因为来自 DWin 和 Andrie 的 cmets。 R 邮件列表中的许多参与者都分享了您的态度,但在分享时往往不太礼貌。我发现这种精英主义几乎令人难以忍受。我通过使用 FOSS 并向人们展示它的工作原理来传播 FOSS,而不是站在肥皂盒上。
  • 该死的字符限制。 . . .国外包中spss.c的版权日期是2000年。如果不看所有的changelog,这段代码可能很长时间没有实质性的接触。我将向版权文件中列出的所有者发送电子邮件,但他们可能不再积极开发代码。我对逆向工程二进制文件格式一无所知,但如果有人可以为我指明正确的方向,我愿意学习/帮助。
  • 把文件发给我。使用 Dwin 的名字和加文·辛普森 (Gavin Simpson) 在这个 SO question 中的评论中的一点功劳来揭开我的面纱应该不难; stackoverflow.com/questions/6959862/… 。我发给 R-help 的任何帖子都没有隐藏我的真实地址:stat.ethz.ch/pipermail/r-help/2011-October/thread.html
  • 谢谢。不想打架,我很久以前就厌倦了那个邮件列表。我可以将示例文件发送给任何想要查看的人。我使用 SPSS 11 创建了一个相同的文件。这个文件没有错误地导入。我在 okteta 中查看了它们,但我对使用二进制文件有点不满意。但是,拥有两个文件应该更容易识别更改的内容。存在一些差异,但如果没有先查看导入代码,我对它为什么会抛出警告没有任何特别的概念。
【解决方案2】:

SPSS 文件格式未公开记录并且可以更改,但 IBM SPSS 确实提供了可以读取和写入 SAV 文件格式的免费库。这些掩盖了对格式的任何更改。您可以从 SPSS Community 网站获取它们(以及许多其他免费的好东西,包括 SPSS 与 R 的集成)。转至 www.ibm.com/developerworks/spssdevcentral 并环顾四周。顺便说一句,自 2000 年以来对 sav 文件进行了大量添加/更改,尽管旧版本仍然可以读取核心数据。

HTH, 乔恩·派克

【讨论】:

  • 以上链接是对 IBM 对支持 SPSS 的承诺的一个很好的思考
猜你喜欢
  • 2013-12-14
  • 1970-01-01
  • 2012-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多