我正在尝试学习R并想要引入一个SPSS文件,我可以在SPSS中打开它 .
我尝试使用 read.spss
来自 foreign
和 spss.get
来自 Hmisc
. 两条错误消息都是相同的 .
这是我的代码:
## install.packages("Hmisc")
library(foreign)
## change the working directory
getwd()
setwd('C:/Documents and Settings/BTIBERT/Desktop/')
## load in the file
## ?read.spss
asq <- read.spss('ASQ2010.sav', to.data.frame=T)
由此产生的错误:
read.spss中的错误(“ASQ2010.sav”,to.data.frame = T):错误读取系统文件头另外:警告消息:在read.spss(“ASQ2010.sav”,to.data.frame) = T):ASQ2010.sav:位置0:字符'\ 000'(
此外,我尝试将SPSS文件保存为SPSS 7 .sav文件(之前使用的是SPSS 18) .
警告消息:1:在read.spss(“ASQ2010_test.sav”,to.data.frame = T)中:ASQ2010_test.sav:系统文件2中遇到无法识别的记录类型7,子类型14:在read.spss中(“ASQ2010_test” .sav“,to.data.frame = T):ASQ2010_test.sav:系统文件中遇到无法识别的记录类型7,子类型18
14 回答
我有一个类似的问题,并在
read.spss
帮助中提示后解决了这个问题 . 使用包memisc
,您可以导入 portable SPSS文件,如下所示:同样,对于.sav文件:
虽然在这种情况下我似乎错过了一些字符串值,而便携式导入无缝地工作 .
spss.portable.file
的帮助页面声称:由于大多数文件头的解析都是在R中完成的,因此导入器机制比包"foreign"的read.spss和read.dta更灵活和可扩展 . 它们还适用于高效加载大型数据集 . 最重要的是,导入程序对象支持此程序包提供的标签,缺失值和描述 .
如果您有权访问SPSS,请将文件另存为.csv,因此请使用
read.csv
或read.table
进行导入 . 我记不起.sav文件导入的任何问题 . 到目前为止,它的工作方式与read.spss
和spss.get
一样 . 我估计spss.get
不会给出不同的结果,因为它取决于foreign::read.spss
你能提供一些关于SPSS / R / Hmisc /外国版的信息吗?
看起来R read.spss实现不完整或已损坏 . 但是,R2.10.1比R2.8.1更好 . 看起来R对sav文件中的自定义属性感到不满,即使是2.10.1(我最新的) . R也可能无法理解文件中的字符编码字段,特别是它可能不适用于SPSS Unicode文件 .
您可以尝试在SPSS中打开文件,删除任何自定义属性,然后重新保存文件 . 您可以使用SPSS命令查看是否存在自定义属性
显示属性 .
如果是这样,请删除它们(请参阅VARIABLE ATTRIBUTE和DATAFILE ATTRIBUTE命令),然后重试 .
HTH,Jon Peck
您可以使用上述解决方案或您当前使用的解决方案从
R
读取SPSS
文件 . 只需确保该命令随文件一起提供,即可正确读取 . 我有同样的错误,问题是,SPSS无法访问该文件 . 您应确保文件路径正确,文件可访问且格式正确 .就 warning message 而言,它不会影响数据 . 记录类型7用于在较新的SPSS软件中存储功能,以使旧的SPSS软件能够读取新数据 . 但不影响数据 . 我已经使用了很多次,数据也没有丢失 .
您也可以在http://r.789695.n4.nabble.com/read-spss-warning-message-Unrecognized-record-type-7-subtype-18-encountered-in-system-file-td3000775.html#a3007945阅读此内容 .
这里没有提到的另一个解决方案是通过ODBC读取R中的SPSS数据 . 你需要:
IBM SPSS Statistics Data File Driver . 独立驱动程序就足够了 .
使用R中的
RODBC
包导入SPSS数据见the example here . 但是我必须承认,非常大的数据文件可能存在问题 .
您正在使用的包没有这样的问题 . 读取spss文件的唯一要求是将文件放入PORTABLE格式文件中 . 我的意思是,spss文件有* .sav扩展名 . 您需要在使用* .por扩展名的可移植文档中转换spss文件 .
http://www.statmethods.net/input/importingdata.html中有更多信息
1)
我发现程序,stat-transfer,对于将spss和stata文件导入R非常有用 .
它通过将spss转换为R数据集来解决您提到的问题 . 对于将超大型数据集子集化为R所消耗的较小部分也非常有用 . 不是免费的,但是用于处理来自不同程序的数据集的非常有用的工具 - 特别是如果您无法访问它们 .
2)
Memisc包也有一个值得尝试的spss功能 .
read.spss
似乎已经过时了,所以我使用了名为memisc
的包 .要实现这一点,请执行以下操作:
你也可以试试这个:
如果你想从一个文件夹中读取所有文件:
关闭SPSS中的UNICODE
打开SPSS,不打开任何数据,并在语法编辑器中运行下面的代码
打开数据集并重新保存以删除Unicode
read.spss('yourdata.sav', to.data.frame=T)
然后正常工作对我来说,使用memisc很好!
在我的情况下,此警告首先与新变量的外观相结合我的数据列的值为-100,2,2,2,...,标签和值之间的对应关系的移位以及最后一个变量的删除 . 一个有效的解决方案是(使用SPSS)在文件的最后一列中创建一个新的转储变量,用随机值填充它并执行以下代码:(filename是sav文件的路径,在我的例子中是原始SPSS文件有62列,因此有额外的哑变量63
希望上面的代码能帮助别人 .
我知道这篇文章很老,但我也遇到了将Qualtrics SPSS文件加载到R中的问题.R的read.spss代码很久以前来自PSPP,并且暂时没有更新 . (而且Hmisc的代码也使用read.spss(),所以那里没有运气 . )
好消息是PSPP 0.6.1应该可以正确读取文件,只要在Qualtrics中的“下载数据”页面上指定“短 - 255(SPSS 12.0及更早版本)”的“字符串宽度”即可 . 将其读入PSPP,保存新副本,您应该开展业务 . 尴尬,但免费 .
,
我同意@SDahm认为
haven
包将是可行的方法 . 在开始使用字符串值时,我自己也有点挣扎,所以我想我也会在这里分享我的方法 .“语义”小插图有关于此主题的一些有用信息 .