2011-08-31 7 views
2

我不是一個統計人員,但必須處理相當一些數據。在大多數情況下,這些數據集來自在線調查;因此我有一個MySQL數據庫,並知道如何從中獲得一些結果。如何在Stata中通過語句(來自MySQL)創建一個組?

但是,現在我得到了一個Stata文件,我需要做一些分析。在MySQL中我會知道如何做到這一點,但是我陷入了Stata並尋求你的幫助。

我有一個不算小的表(大約50,000列)包含以下的列(有更多的cols但這些都是我一起工作的那些):

ID - 對象ID,唯一值

名稱 - 對象的名稱,爲字符串值

類 - 對象的類,整數範圍爲1 - 6

原點 - 對象的起源,整數範圍1 - 2

在50k行內,只有大約7k個不同的名稱。在Stata中,我可以用list name找回所有的名字,甚至可以用list name if class == 2將它限制在一個類中。

現在我想要一個所有不同名稱的列表以及具有該名稱的對象的計數,並且該列表按照計數排序。 在MySQL中,我會查詢SELECT name, COUNT(*) AS cnt FROM objects GROUP BY name ORDER BY cnt DESC但是Stata會怎麼做呢?

接下來的步驟是爲每個班級或兩個來源獲得這樣的清單,即SELECT name, COUNT(*) AS cnt FROM objects WHERE class = 2 GROUP BY name ORDER BY cnt DESC,Stata也可能有這樣的清單嗎?

ps:我不知道是否stackoverflow是正確的地方,因爲Stata不是真正的編程語言,是嗎?但是我在這裏發現了一些Stata相關的問題;這就是爲什麼我在這裏發佈它。如果有更好的地方可以這樣做,請將我指向正確的地方。

+1

此答案有幫助嗎? HTTP://計算器。com/questions/6151020/how-to-aggregate-relational-data-in-stata –

+0

這看起來絕對很有希望,但我最終得到了數千個新變量或數據集,我無法做任何事情。我仍然會嘗試去適應這一點。最後,我仍然需要做的就是將所有這些mX值相加。感謝您指出我的問題! – Paul

+0

人們會問關於Stata的問題,但社區的專業知識有限。 Stata問題的第一站是statalist(http://www.stata.com/statalist/) – StasK

回答

2

請記住,Stata只適用於固定長度的矩形表,因此您只能添加跨越整個50k行的列。在這個設置中,這是你可以做的。

對於第一個問題(姓名和頻率的列表),你可以

collapse (count) freq = name, by(class) 
    sort class freq name 
    list class name freq, sepby(class) 

注意collapse將刪除現有的數據和彙總替換。 (通常情況下,我恨這個命令的數據管理的這個方面,但它應該在這裏工作。)如果你不希望這樣的事情發生,這裏是一個更復雜的技巧:

bysort class name : generate long freq = _N 
    bysort class name : generate byte first = (_n==1) 
    sort class freq name 
    list class name freq if first, sepby(class) 

(說明:_N是觀察在by -group和_n數是的by -group內的當前觀測的數量。)

可以再用if class==#子集這之類的利益,因爲你已經知道了。

+0

感謝StasK,這正是我所期待的。 by(s)命令是我的新朋友。 ;) – Paul

0

還可以使用ssc inst groups下載groups命令。

相關問題