我有一个包含大约 1000 个变量的数据集。但我只想使用这些变量的一小部分来处理数据集。删除所有不需要的变量的便捷方法是什么?
使用DELETE VARIABLE命令如
DELETE VARIABLES var1 TO var13 var 15 var 17 TO var var35 ...
Run Code Online (Sandbox Code Playgroud)
会很烦人而且容易出错。
DATA LIST LIST (",") /
make (A18) price (F4) mpg (F2) rep78 (F1) hdroom (COMMA1.1)
trunk (F2) weight (F4) length (F3) turn (F2)
displ (F3) gratio (COMMA2.2) foreign (F1) .
BEGIN DATA.
AMC Concord, 4099, , 3, 2.5, 11, 2930, 186, 40, 121, 3.58, 0
AMC Pacer, 4749, , 3, 3.0, 11, 3350, 173, 40, 258, 2.53, 0
AMC Spirit, 3799, , 3, .0, 12, 2640, 168, 35, 121, 3.08, 0
Audi 5000, 9690, 17, 5, 3.0, 15, 2830, 189, 37, 131, 3.20, 1
Audi Fox, 6295, 23, 3, 2.5, 11, 2070, 174, 36, 97, 3.70, 1
BMW 320i, 9735, 25, 4, 2.5, 12, 2650, 177, 34, 121, 3.64, 1
Buick Century, 4816, 20, 3, 4.5, 16, 3250, 196, 40, 196, 2.93, 0
Buick Electra, 7827, 15, 4, 4.0, 20, 4080, 222, 43, 350, 2.41, 0
Buick LeSabre, 5788, 18, 3, 4.0, 21, 3670, 218, 43, 231, 2.73, 0
END DATA.
DATASET NAME cars.
Run Code Online (Sandbox Code Playgroud)
假设您要提取变量make、trunk 和turn。
如果您想保留缩减的数据集以备后用,显而易见的方法是使用命令中的/KEEP选项SAVE。
SAVE OUTFILE='cars.sav'
/KEEP make trunk turn.
Run Code Online (Sandbox Code Playgroud)
另一方面,如果您想打开仅包含变量子集的现有数据集,则可以使用GET FILE带有/KEEP选项的命令。
如果您只想临时使用缩减的数据集而不将其存储到硬盘驱动器,则此方法很有用。
MATCH FILES
/FILE *
/KEEP make trunk turn.
Run Code Online (Sandbox Code Playgroud)
如果您有一个非常庞大的数据集,上述方法可能需要一些时间,因为它们读取(和写入)所有数据。在这种情况下,直接使用 Python 操作数据字典可能会有所帮助。嗯,我就是这么想的。这是我迄今为止尝试过的方法,或多或少是成功的。
BEGIN PROGRAM PYTHON.
keepList = ["make", "trunk", "turn"]
import spss
spss.StartDataStep()
datasetObj = spss.Dataset('cars')
varListObj = datasetObj.varlist
varList = [var.name.encode('utf8') for var in varListObj]
datasetObj.close()
spss.EndDataStep()
deleteList = [item for item in varList if item not in keepList]
spss.Submit("DELETE VARIABLES %s." % " ".join(deleteList))
END PROGRAM
Run Code Online (Sandbox Code Playgroud)
注意:这段代码仅在您要删除的变量列表不超过 100 时才有效(此错误应在 SPSS v23 或更高版本中修复)。否则,您必须将列表拆分为单独的部分。我通过将 spss.Submit 行替换为:
chunks = 100
for i in xrange(0, len(deleteList), chunks):
spss.Submit("DELETE VARIABLES %s." % " ".join(deleteList[i:i+chunks]))
Run Code Online (Sandbox Code Playgroud)
这样做的问题是,即使程序块在大数据集上运行得很快,但事实证明,在这个块之后,每个命令的执行都会痛苦地减慢,这可能是由内存泄漏引起的。
| 归档时间: |
|
| 查看次数: |
6510 次 |
| 最近记录: |