我試圖讓Stata命令putexcel
給出一個連續變量的摘要統計信息,該統計信息由一個接一個的分類變量分組在同一個工作表中。這應該重複/循環多年,每年都有自己的表格。Stata putexcel摘要按組向MS Excel統計
這就帶來兩個問題:
使用
bysort
不會記錄所有組(那也許是因爲它,但我不知道如何對它們進行檢索),如此看來我必須使用如果條件爲每個級別。因此,問題變成:我的分類變量中有150個類別(組),所有半隨機4位數字。因此,理想情況下,解決方案會自動檢測組中的水平數量,而不是爲每個if語句手寫150個不同的類別。
下面是一個例子數據集:
clear
input ///
id income1996 income1997 employcode1996 employcode1997
1 500 400 3300 5000
2 500 300 5000 5000
3 900 1050 8830 8220
4 1000 1200 8220 3300
5 600 900 5000 8220
6 200 100 8220 5000
7 700 100 3300 3300
8 1000 100 5000 5000
end
這裏是我的不是很好的嘗試,以解決該問題。我知道局部變量就像寫在手裏一樣高效,但這是我最好的選擇。
forval x=1996/1997 {
local y=2
local z=`y'+1
local w=`y'+2
summarize income`x' if employcode`x'==3300
putexcel A1=rnames A`z'=rscalars using "C:\Users\emilbebri\Downloads\tmp\results.xlsx", sheet(year`x') modify colwise
summarize income`x' if employcode`x'==5000
putexcel A`z'=rscalars using "C:\Users\emilbebri\Downloads\tmp\results.xlsx", sheet(year`x') modify colwise
summarize income`x' if employcode`x'==8220
putexcel A`w'=rscalars using "C:\Users\emilbebri\Downloads\tmp\results.xlsx", sheet(year`x') modify colwise
}
希望能得到很好的回答,我的rmi-strained右手也會很感激! This guy seems to be on to something similar,但是,實際內容太遠了,我很遺憾,因爲我會如何將這些知識轉移到我類似但不同種類的問題上。
更新:這裏是羅伯託的答案,但修改,使輸出變得更加緊湊,就像這樣:(最後一行沒有平均值和SD的原因是因爲示例數據在該類別中只有一個觀察值)
這裏是產生它的代碼。
forvalues x = 1996/1997 {
local xlsrow = 2
quietly levelsof employcode`x', local(ecodes)
foreach ecode of local ecodes {
// show on screen
quietly display "Year `x', code `ecode'"
quietly summarize income`x' if employcode`x' == `ecode'
quietly display ""
// save to MS Excel
putexcel A`xlsrow'=("Code `ecode'") B`xlsrow'=rscalars ///
A1=("discokode") B1=rnames ///
using "C:\Users\emilbebri\Downloads\tmp\results11.xlsx", ///
sheet(`x') modify colwise
// update MS Excel row
local xlsrow = `xlsrow' + 1
}
}
檢查'help levelsof'。此外,請考慮以_long_形式工作,而不是_wide_。這種方式大多數分析更容易。請參閱'幫助重塑'。 –
謝謝,除非我無法完成它的工作。我更新了我的帖子,受到這個傢伙的啓發,但它不起作用,我不能完全理解爲什麼:http://www.andrewdyck.com/using-levelsof-to-future-證明循環通過階乘變量in-stata/ – emilBeBri
您創建'本地employcode1996_tmp',但從不使用它。 –