我必须通过得到所需变量的均值,中位数,标准差和四分位数间距(IQR)来聚合(当然还有一个分类中断变量)一个包含一些连续变量的相当大的数据表。
前三个是使用SPSS Aggregate 命令的简单命令,但我不知道如何通过聚合数据表来计算IQR。
我知道我可以使用 Descriptives (按四分位数)计算IQR,但由于我需要聚合计算 - 这不是一个选项。不幸的是,使用R也失败了,这要归功于一些奇怪的情况(无法在R中加载一个巨大的逗号分隔文件,不能使用base {read.table,也不能使用sqldf加载,bigmemory也不能加载ff {3}}包)。
欢迎任何想法!当然:提前谢谢你。
P.S。:我想通过将标准差乘以1.5来估算IQR,但是这种方法不适用,因为分布是偏斜的,所以假设正态性不存在。
P.S。:您认为在SPSS中使用R不会导致内存问题,例如在纯R中打开数据集时会出现吗?
答案 0 :(得分:3)
这种语法可以解决问题。不需要在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命令并再次运行上面的频率命令。
split file by group.
freq var = X1 X2
/format = notable
/ntiles = 4.
split file end.
您还可以在ctables中获得特定的百分位数(并且可以执行您想要的任何分组/嵌套)。此时可能更有用的解决方案是创建一个实际保存单独文件的程序(或在仍然加载的情况下减少特定组的完整数据集),对每个单独文件进行计算并将其转储到数据集中。使用具有400万条记录的数据集是一件痛苦的事情,如果您只是将文件拆分起来似乎没有必要。这可以通过宏命令完成。
答案 1 :(得分:2)
OMS可以将任何数据透视表捕获为数据集,因此以这种方式显示的任何统计结果都可以用作数据集。但是,在这种情况下,另一种方法是使用RANK命令。 RANK允许对变量进行分组,因此您可以在组内获得排名,并且可以计算组内的四分位数和百分位数。例如, RANK VARIABLES =工资(A)由少数族裔人士担任 / RANK / NTILES(4)/ PERCENT。然后与FIRST聚合并将组变量聚合为中断将为您提供按组计算的四分位数据集,从中计算iqr。
许多给猫皮肤的方法。
-Jon Peck