0

我在 SPSS 中有一个数据集,它有 100K+ 行和 100 多列。我想同时将行和列过滤到一个新的 SPSS 数据集中。

我可以使用subsetR 中的命令轻松完成此操作。例如:

new_data = subset(old_data, select = ColumnA >10, select = c(ColumnA, ColumnC, ColumnZZ))

更容易的是:

new data  = old_data[old_data$ColumnA >10, c(1, 4, 89)]

我在哪里传递列索引。

SPSS中的等价物是什么?

我喜欢 R,但 SPSS 的读/写和数据管理速度要好得多。

4

2 回答 2

4

我不确定您在写“SPSS的读/写和数据管理速度明显优于R”时所指的是什么。您的问题本身证明了R在数据管理方面的灵活性!而且,10 万行 100 列的数据集绝不是一个大数据集。

但是,要回答你的问题,也许你正在寻找这样的东西。我提供的是“程序化”解决方案,而不是 GUI 解决方案,因为您在 Stack Overflow 上提出问题,其中重点更多地放在事物的编程方面。我正在使用可以在此处找到的示例数据文件:http: //www.ats.ucla.edu/stat/spss/examples/chp/p004.sav

将该文件保存到 SPSS 工作目录,打开 SPSS 语法编辑器,然后键入以下内容:

GET FILE='p004.sav'.
SELECT IF (lactatio <= 3).
SAVE OUTFILE= 'mynewdatafile.sav'
  /KEEP currentm previous lactatio.
GET FILE='mynewdatafile.sav'.

但是,更有可能的是,您将不得不经历这样的事情:

FILE HANDLE directoryPath /NAME='C:\path\to\working\directory\' . 
FILE HANDLE myFile /NAME='directoryPath/p004.sav' . 
GET FILE='myFile'.
SELECT IF (lactatio <= 3).
SAVE OUTFILE= 'directoryPath/mynewdatafile.sav'
  /KEEP currentm previous lactatio.
FILE HANDLE myFile /NAME='directoryPath/mynewdatafile.sav'.
GET FILE='myFile'.

您现在应该创建了一个只有三列的新文件,并且“lactatio”列中的任何值都不大于 3。

所以,基本步骤是:

  1. 加载您要使用的数据。
  2. 您感兴趣的所有案例的所有列的子集。
  3. 保存一个仅包含您感兴趣的变量的新文件。
  4. 在继续之前加载该新文件。

使用 R,基本步骤是:

  1. 加载您要使用的数据。
  2. 使用您的行和列子集创建一个对象(您知道该怎么做)。

嗯....我不了解你,但我知道更喜欢哪种方法;)

如果您在 R 中使用正确的工具,如果速度确实是个问题,您也可以直接读取您感兴趣的特定子集,而无需先加载整个数据集。

于 2013-02-06T05:45:02.997 回答
0

在 spss 中,您不能在一个命令中组合这两个操作,但很容易将其分为两个:

dataset copy old_data. /* delete this if you don't need to keep both old and new data.
select if ColumnA>10.
add files /file=* /keep=ColumnA ColumnC ColumnZZ.
于 2016-05-26T07:10:37.813 回答