我必须聚合(当然是用一个分类中断变量)一个相当大的数据表,其中包含一些连续变量,得到所需变量的平均值、中值、标准差和四分位数范围(IQR)。
前三个是一个简单的使用SPSS聚合命令,但我不知道如何通过聚合数据表来计算IQR。
我知道我可以使用描述符(按四分位数)来计算IQR,但是由于我需要聚合中的计算--这不是一个选项。不幸的是,由于一些奇怪的情况,使用R失败了(不能在R中加载一个巨大的逗号分隔的文件,也不能使用base::read.table、平方、大记忆和ff包)。
任何想法都是欢迎的!当然,事先谢谢你。
P.S.:我想通过把标准差乘以1.5来估算IQR,但是这种方法不能工作,因为分布是倾斜的,所以假设正态不成立。
你认为在SPSS中使用R不会导致记忆问题,比如在纯R中打开数据集?
发布于 2011-04-09 01:30:16
OMS可以将任何枢轴表捕获为数据集,因此任何以这种方式显示的统计结果都可以用作数据集。然而,在这种情况下,另一种方法是使用秩命令。秩允许对变量进行分组,因此您可以在组中获得排名,并且它可以计算组内的四分位数和百分位数。例如,VARIABLES=salary (A)按职务少数群体/RANK /NTILES(4) /PERCENT排序。然后,以第一个变量和组变量作为中断进行聚合,将为您提供一个四分位数的数据集(按组分列),从中计算iqr。
剥猫皮的方法很多。
-Jon Peck
发布于 2011-04-08 12:37:20
这个语法应该能起作用。这一任务不需要在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.您还可以在ctable中获得特定的百分位数(并且可以进行任何您想要的分组/嵌套)。不过,在这一点上,可能更有用的解决方案是,使一个程序实际上保存单独的文件(或在仍然加载特定组时减少完整的数据集),对每个单独的文件进行计算并将其转储到数据集中。使用拥有400万条记录的数据集是一件痛苦的事,如果只是将文件拆分,则似乎没有必要。这可以通过宏命令来实现。
https://stackoverflow.com/questions/5588694
复制相似问题