这种语法应该可以解决问题。无需专门为此任务在 SPSS 和 R 之间来回迁移。
*making fake data, 4 million records and 150 variables.
input program.
loop i = 1 to 4000000.
end case.
end loop.
end file.
end input program.
dataset name Temp.
execute.
vector X(150).
do repeat X = X1 to X150.
compute X = RV.NORMAL(0,1).
end repeat.
*This is the command you are interested in, puts the stats table into a new dataset.
Dataset declare IQR.
OMS
/SELECT TABLES
/IF SUBTYPES = 'Statistics'
/DESTINATION FORMAT = SAV outfile = 'IQR' VIEWER=NO.
freq var = X1
/format = notable
/ntiles = 4.
OMSEND.
对于如此庞大的数据集,这仍然需要时间,但这是可以预料的。只需在 SPSS 帮助文件中搜索“OMS”即可找到有关 OMS 工作原理的示例语法。
鉴于您要为许多组计算 IQR 的进一步约束,我可以看到几种不同的方法来进行。一种是只使用拆分文件命令并再次运行上述频率命令。
split file by group.
freq var = X1 X2
/format = notable
/ntiles = 4.
split file end.
您还可以在 ctables 中获得特定的百分位数(并且可以为此进行任何分组/嵌套)。不过,此时可能更有用的解决方案是制作一个程序,该程序实际保存单独的文件(或在仍加载的同时减少特定组的完整数据集),对每个单独的文件进行计算并将其转储到数据集中。使用具有 400 万条记录的数据集是一件很痛苦的事情,如果您只是将文件拆分,这似乎没有必要。这可以通过宏命令来完成。