0

R 版本:2.12.2 / 操作系统:Windows XP

我需要查询和操作的数据存储在一个 SPSS .sav 文件(大小 ~ 112MB)中,我对 SPSS 语法有非常基本的了解。我对 R 更满意(并且通常更喜欢它用于数据操作和分析),因此我将 SPSS 文件保存为制表符分隔的文件(大小 ~ 85MB),并尝试使用 RODBC 包中的功能对其进行查询。

使用 Windows 控制面板上管理工具组中的“数据源 (ODBC)”应用程序,我使用 Microsoft 文本驱动程序设置了一个数据库(Windows 文件夹),其中包含表(制表符分隔的文件)。

当前感兴趣的表有一个“日期”字段(称为“日期时间”),其中日期格式为“%Y/%m/%d”。当我第一次尝试使用该字段的条件查询数据库时,我得到了一个观察值为零的结果集。因此,我将“日期时间”更改为数据类型“字符”并再次尝试查询(无济于事)。

我能够成功查询数据库,即

sqlQuery(channel = cn, query = "SELECT * FROM large_table.txt", as.is = TRUE, stringsAsFactors = FALSE, max = 20)

返回结果。以下查询返回零观测结果集(我已验证在其“日期时间”字段中至少有一条值为“2011/04/01”的记录)。

sqlQuery(channel = cn, query = "SELECT DateTime FROM large_table.txt WHERE DateTime = {d '2011-04-01'}", as.is = TRUE, stringsAsFactors = FALSE)

sqlQuery(channel = cn, query = "SELECT DateTime FROM large_table.txt WHERE DateTime = '2011/04/01'", as.is = TRUE, stringsAsFactors = FALSE)

谁能告诉我为什么结果集没有观察结果?

非常感谢任何改进我的数据库连接或查询的建议。我更喜欢使用 RODBC 包而不是另一个数据库查询包,但如果有必要我愿意尝试一些新的东西。

4

2 回答 2

3

我会为此使用“memisc”包。为您的 3 个 SPSS 文件设置 spss.system.file() 导入器,子集使用 memisc 版本将所需的变量加载到 R 中,包括处理用户缺失的级别。

There are some oddities around how SPSS files are set up - it is fairly frequent for SPSS files with numeric variables to have user-missings set, which may need sorting at the R end into an interval scaling with appropriate NAs.

于 2011-10-20T19:08:22.620 回答
2

将 SPSS 文件直接读入 R 可以省去很多麻烦。

library(foreign)
dat <- read.spss("filename.sav", to.data.frame=TRUE)

这将返回一个 data.frame,您可以使用所有常规 R 工具对其进行分析。

作为附带的好处,您还将在 data.frame 的属性中包含调查表文本。

有关?read.spss更多详细信息,请参阅。

于 2011-10-20T10:21:39.887 回答