在SPSS中同时选择行和列

时间:2013-02-05 18:27:45

标签: r spss

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

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

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的读/写和数据管理速度明显更好。

2 个答案:

答案 0 :(得分:4)

当你写“SPSS的读/写和数据管理速度明显优于R”时,我不确定你到底指的是什么。你的问题本身就证明了R在数据管理方面的灵活性!而且,100k行和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. 在继续之前加载该新文件。
  5. 使用R,基本步骤是:

    1. 加载您要使用的数据。
    2. 使用您的行和列子集(您知道如何操作)创建一个对象。
    3. 嗯....我不了解你,但我知道更喜欢哪种方法;)

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

答案 1 :(得分: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.