這個語法應該可以做到。完全不需要在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萬條記錄的數據集是一件痛苦的事情,如果你只是分割文件,似乎並不需要。這可以通過宏命令來完成。
您有權訪問傳統數據庫嗎?如果是這樣,你可以將你的數據在中位數分成兩組,然後找到75%和25%百分位的高和低組的中位數,這將給你IQR。 – Chase 2011-04-07 23:27:48
謝謝@Chase!我會調查你的建議。雖然我不明白'傳統數據庫'的含義,但我擔心分割文件並不是微不足道的。我想用大約2000個類別的變量來聚合文件,因此得到的矩陣將有大約2000個包含所有聚合變量的個案。通過將文件分割爲兩部分,並且兩組中的計算中值需要計算所有類別中斷變量中連續變量的中位數,將文件分成2次2000個文件並再次計算中位數。看起來很棘手,但我可能不明白:) – daroczig 2011-04-07 23:45:26
對不起,我應該說關係數據庫,例如Microsoft SQL或MySQL等。大多數關係數據庫允許您直接讀取平面文件。但是,在閱讀您最後的評論之後,我認爲這可能不是最好的方法。 – Chase 2011-04-08 00:39:37