2011-04-07 290 views
1

我必須通過生成所需變量的平均值,中位數,標準差和四分位間距(IQR)來聚合(當然包括分類中斷變量)一個包含一些連續變量的相當大的數據表。如何在SPSS中的IQR上進行聚合?

前三項與SPSS Aggregate命令相當簡單,但我不知道如何通過聚合數據表來計算IQR。

我知道我可以通過使用描述性的(按四分位數)計算IQR,但是因爲我需要聚合計算 - 這不是一個選項。不幸的是,使用R失敗也得益於一些奇怪的情況(不能在R中加載逗號分隔的文件,既不使用base :: read.table,也不使用sqldfbigmemory也不使用ff軟件包)。

歡迎任何想法!當然:先謝謝你。


P.S:我想過由1.5標準偏差乘以估計IQR,但這種方法是行不通的分佈是扭曲的,所以假設常態不看臺。

P.S .:你認爲在SPSS中使用R不會導致內存問題,就像在純R中打開數據集一樣?

+0

您有權訪問傳統數據庫嗎?如果是這樣,你可以將你的數據在中位數分成兩組,然後找到75%和25%百分位的高和低組的中位數,這將給你IQR。 – Chase 2011-04-07 23:27:48

+0

謝謝@Chase!我會調查你的建議。雖然我不明白'傳統數據庫'的含義,但我擔心分割文件並不是微不足道的。我想用大約2000個類別的變量來聚合文件,因此得到的矩陣將有大約2000個包含所有聚合變量的個案。通過將文件分割爲兩部分,並且兩組中的計算中值需要計算所有類別中斷變量中連續變量的中位數,將文件分成2次2000個文件並再次計算中位數。看起來很棘手,但我可能不明白:) – daroczig 2011-04-07 23:45:26

+0

對不起,我應該說關係數據庫,例如Microsoft SQL或MySQL等。大多數關係數據庫允許您直接讀取平面文件。但是,在閱讀您最後的評論之後,我認爲這可能不是最好的方法。 – Chase 2011-04-08 00:39:37

回答

2

OMS可以捕獲任何數據透視表作爲數據集,因此以任何方式顯示的統計結果都可以用作數據集。然而,在這種情況下,另一種方法是使用RANK命令。 RANK允許對變量進行分組,因此您可以在組內獲得排名,並且可以計算組內的四分位數和百分位數。例如, RANK VARIABLES =工資(A)BY職位少數 /排名/ NTILES(4)/ PERCENT。然後使用FIRST和組變量作爲休息進行聚合,將爲您提供按組來計算iqr的四分位數據集。

許多方法去皮膚貓。

-Jon Peck

+0

非常感謝你這個非常聰明的答案,這似乎解決了我的問題真的很快 - 基於一些簡短的實驗。 – daroczig 2011-04-13 23:13:34

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萬條記錄的數據集是一件痛苦的事情,如果你只是分割文件,似乎並不需要。這可以通過宏命令來完成。

+0

作爲一個筆記,當我試圖在所有的150個變量上同時運行這個變量時,我的記憶被超過了,但是當只指定一個變量時沒有記憶。 – 2011-04-08 13:04:36

+0

非常感謝你,我認爲我明白了在一個新的數據庫中保存Descriptives - 它看起來非常有用!我唯一的問題是,我無法弄清楚如何使用中斷變量來做到這一點(因爲我想通過這個變量進行聚合),所以要獲得一個包含這些值的數據庫,但對於每個類別的中斷變量(大約有2000個類別) 。我看到我可以通過過濾給定類別的案例來循環執行此操作(從1到〜2000),但這會導致一堆文件。你有一個想法如何改善你的答案?再次感謝,你絕對應該得到滿足。 – daroczig 2011-04-08 13:33:49

+0

對於遲到的回覆感到抱歉,我用OMS「玩」了很多東西(除了很多其他事情)以測試此方法。儘管OMS看起來非常好,但定期分割這樣一個大文件**實際上是資源匱乏 - 語法只運行了兩天,因此只有一個變量:)所以我會使用@JKP的建議,這個建議看起來非常快與OMS /分割相比,所以複選標記就會出現在那裏。無論如何:非常感謝*您的真誠幫助,同時也將我的注意力引向OMS! – daroczig 2011-04-13 23:12:34

相關問題