我們知道要如何建立dummy variable,基本上範圍都是在同一個observation,將特定某一或幾個欄位做處理。但是,如果你同一個人,有好幾個observation,你想要加總這些observation的某欄位,該怎麼辦?拿下面的例子來說,aid是文章流水號,sid是學生流水號。欄位1、2、3、4是我想要看的東西,是不同種類的修辭,裡面的值代表該修辭在該篇文章出現幾次。每一個學生寫的文章量不同,我想要計算學生文章總數,以及使用各修辭的總次數。
aid | sid | number | TW | 1 | 2 | 3 | 4 |
1 | 1 | 1 | 1 | 1 | |||
2 | 1 | 2 | 1 | 1 | |||
3 | 1 | 3 | 1 | 1 | |||
4 | 1 | 4 | 1 | ||||
5 | 1 | 5 | 1 | 1 | |||
6 | 2 | 1 | 1 | 1 | |||
7 | 2 | 2 | 1 | 1 | 1 | ||
8 | 2 | 3 | 1 | 1 | |||
9 | 2 | 4 | 1 | 1 | |||
10 | 2 | 5 | 1 | 1 | |||
11 | 2 | 6 | 1 | 1 | 1 |
換句話說,我想要得到這樣的結果:
sid number TW 1 2 3 4
1 5 1 0 4 0 0
2 6 1 0 4 0 4
number我要得到的是每個人寫幾篇文章,也就是count,欄位1、2、3、4要得到的是此學生使用修辭1、2、3、4的加總。這問題困擾了我很久,甚至直接拿出access來加總 (汗),後來總算在stata找到解決方案。
要使用的指令就是collapse。collapse的用處就是將資料整合起來,依stata說明的解釋是make dataset of summary dataset,也就是跟我們想要做的一樣。
我要依sid將資料整合起來,所以指令最後是加上, by (sid)。要collapse的欄位最重要的是欄位1至4,要加總,所以整行的語法像是:
collapse (sum) 1 2 3 4, by (sid)
如果有的地方要sum,有的地方要count,那語法就會變成:
collapse (sum) 1 2 3 4 (count) number, by (sid)
網友阿豆仔提問:如果資料是像這樣的,像要照id 和type加總,
id type income
1 1 200
1 1 100
1 2 50
2 1 100
2 1 200
2 3 150
並得到像這樣的結果:
id type income
1 1 300
1 2 50
2 1 300
2 3 150
該怎麼辦呢?
小小修改一下code就行: collapse (sum) income, by (id type)
如果是要看frequency和percentage,那要用的是contract。我暫時用不到,所以留待以後再研究。