stata結(jié)果導(dǎo)入excel-描述統(tǒng)計

前段時間知道stata16可以直接導(dǎo)入SPSS數(shù)據(jù),就把stata16安裝了

然后,就想了解stata16的新功能,官方介紹:New in Stata 16

最開始,是里面的Reproducible reporting吸引我,畢竟一直在想著怎么寫動態(tài)分析報告,即分析結(jié)果和報告同步更新。

就研究了一下里面提到的dyndoc,putexcel,putword命令

首先,就是研究了putexcel命令,想著把頻率分析結(jié)果能直接導(dǎo)入excel,尤其是有大量變量的時候

簡單嘗試了一下,發(fā)現(xiàn)還是很好用,尤其是導(dǎo)出來中文不會亂碼,而且格式自定義,其他命令如logoutasdoc等都有各種問題的。

接下來,分不同帖子寫寫不同分析結(jié)果如何批量導(dǎo)出結(jié)果至excel,

首先是,stata結(jié)果導(dǎo)入excel-頻率分析

接著是,stata結(jié)果導(dǎo)入excel-多重響應(yīng)

然后是,stata結(jié)果導(dǎo)入excel-交叉分析

還有是,描述統(tǒng)計分析結(jié)果導(dǎo)出Excel

1. 思路

目標(biāo):將多個變量的描述統(tǒng)計以及對該變量的分類描述統(tǒng)計結(jié)果批量導(dǎo)出Excel

總的來說,思路都是先分析出結(jié)果組成矩陣,再導(dǎo)出excel:

  1. 在stata中將描述統(tǒng)計分析結(jié)果形成矩陣(即描述統(tǒng)計分析結(jié)果表);
  2. 再將矩陣導(dǎo)入excel;
  3. 根據(jù)每個矩陣行數(shù),自動在上個矩陣結(jié)束后空一行,導(dǎo)入新的矩陣;
  4. 通過循環(huán),只需添加變量名,則自動生成新的表;

2. 所有代碼

第一部分:設(shè)置
local rownum=1
local rntable=1
putexcel set result.xlsx,sheet("描述統(tǒng)計",replace) modify

第二部分:循環(huán)
local depvar "P4Q4 P4Q5 P2Q1 P2Q2 P2Q3 P2Q4 P2Q5"
local indepvar "P4Q3 P4Q6 P4Q7"
foreach d of varlist `depvar' {

第三部分:分析及導(dǎo)出
(1)描述統(tǒng)計分析
local dlabel:var label `d'
local dlabel=subinstr("`dlabel'",":","",.)

//描述統(tǒng)計分析
tabstat `d',s(n mean sd min median max) save
mat destable=r(StatTotal)'
mat colnames destable="樣本量" "均值" "標(biāo)準(zhǔn)差" "最小值" "中位數(shù)" "最大值"
mat rownames destable=`dlabel'
// 結(jié)果導(dǎo)出excel
putexcel a`rownum'=matrix(destable),names txtwrap hcenter vcenter
local rntable:rowsof destable
local rownum=`rownum'+`rntable'+2

(2)分類描述統(tǒng)計分析
foreach i of varlist `indepvar' {
//分類變量
quietly fre `i',nov
local ilabel=r(lab_valid)
local inum=r(r)

//分類統(tǒng)計描述分析
tabstat `d',s(n mean sd min median max) by(`i') save
// 分類描述表
mat desbytable=r(Stat1)
forvalues n=2(1)`inum' {
mat coljoin desbytable=desbytable r(Stat`n') 
}
mat coljoin desbytable=desbytable r(StatTotal) 
mat desbytable=desbytable'
mat colnames desbytable="樣本量" "均值" "標(biāo)準(zhǔn)差" "最小值" "中位數(shù)" "最大值"
mat rownames desbytable=`ilabel' "總計"
// 結(jié)果導(dǎo)出excel
putexcel a`rownum'=matrix(desbytable),names txtwrap hcenter vcenter
local rntable:rowsof desbytable
local rownum=`rownum'+`rntable'+2
}
}

第四部分:設(shè)置格式
putexcel c1:c`rownum',nformat(0.00)
putexcel d1:d`rownum',nformat(0.000)

3.代碼解釋

第一部分:設(shè)置

local rownum=1
local rntable=1
putexcel set result.xlsx,sheet("描述統(tǒng)計",replace) modify

與 stata結(jié)果導(dǎo)入excel-頻率分析 stata結(jié)果導(dǎo)入excel-多重響應(yīng) stata結(jié)果導(dǎo)入excel-交叉分析 相似

第二部分:循環(huán)

local depvar "P4Q4 P4Q5 P2Q1 P2Q2 P2Q3 P2Q4 P2Q5"
local indepvar "P4Q3 P4Q6 P4Q7"
foreach d of varlist `depvar' {

將需要描述統(tǒng)計分析的變量(因變量)和分類變量分別存至?xí)涸?code>depvar和indepvar中,之后只需要添加因變量和分類變量就行。

第三部分:分析及導(dǎo)出

(1)描述統(tǒng)計分析

local dlabel:var label `d'
local dlabel=subinstr("`dlabel'",":","",.)

第1句:將因變量的變量標(biāo)簽存至?xí)涸?code>dlabel,便于后期對矩陣命名;

第2句:去掉變量標(biāo)簽中冒號,以免后期矩陣命名出錯;

以因變量P4Q4為例:

dlabel.png
tabstat `d',s(n mean sd min median max) save
mat destable=r(StatTotal)'
mat colnames destable="樣本量" "均值" "標(biāo)準(zhǔn)差" "最小值" "中位數(shù)" "最大值"
mat rownames destable=`dlabel'

第1句:進行描述統(tǒng)計分析,得到因變量的樣本量,均值,標(biāo)準(zhǔn)差,最小值,中位數(shù)和最大值統(tǒng)計量。

注意:添加選項save,得到統(tǒng)計結(jié)果矩陣r(StatTotal)

tabstat結(jié)果.png

第2句:對矩陣r(StatTotal)進行轉(zhuǎn)置,加單引號,得到矩陣destable;

第3句:將矩陣destable的列名修改成樣本量,均值,標(biāo)準(zhǔn)差,最小值,中位數(shù)和最大值

第4句:將矩陣destable的行名修改成因變量的變量標(biāo)簽

矩陣destable:

矩陣destable.png
putexcel a`rownum'=matrix(destable),names txtwrap hcenter vcenter
local rntable:rowsof destable
local rownum=`rownum'+`rntable'+2

目的:將矩陣destable導(dǎo)出Excel

第1句:將矩陣destable導(dǎo)出Excel,從單元格A1(開始循環(huán)時,暫元rownum為1)導(dǎo)出,帶上矩陣行列名,自動換行,居中

第2句:將矩陣destable的行數(shù)存至?xí)涸?code>rntable中;

第3句:更新暫元rownum,便于下次循環(huán);

(2)分類描述統(tǒng)計分析

foreach i of varlist `indepvar' {
quietly fre `i',nov
local ilabel=r(lab_valid)
local inum=r(r)

第1句:循環(huán)分類變量;

第2-4句:將分類變量的分類標(biāo)簽及類別數(shù)量分別存至?xí)涸?code>ilabel和inum,便于分類描述統(tǒng)計矩陣的生成。

以變量P4Q6為分類變量為例:

分類變量.png
tabstat `d',s(n mean sd min median max) by(`i') save

分類描述統(tǒng)計分析,添加選項save保存結(jié)果,其中,每行結(jié)果存為了1個矩陣:

分類tabstat.png
mat desbytable=r(Stat1)
forvalues n=2(1)`inum' {
mat coljoin desbytable=desbytable r(Stat`n') 
}
mat coljoin desbytable=desbytable r(StatTotal) 
mat desbytable=desbytable'
mat colnames desbytable="樣本量" "均值" "標(biāo)準(zhǔn)差" "最小值" "中位數(shù)" "最大值"
mat rownames desbytable=`ilabel' "總計"

第1-4句:通過循環(huán),將所有r(Stat數(shù)字)的矩陣拼接起來;

第5句:再和矩陣r(StatTotal)合并起來;

第6句:對合并后的矩陣進行轉(zhuǎn)置,得到分類描述統(tǒng)計矩陣desbytable;

第7-8句:對矩陣desbytable加上行列名;

矩陣desbytable.png
putexcel a`rownum'=matrix(desbytable),names txtwrap hcenter vcenter
local rntable:rowsof desbytable
local rownum=`rownum'+`rntable'+2
}
}

目的:將矩陣desbytable導(dǎo)出Excel

第1句:將矩陣desbytable導(dǎo)出Excel,從單元格A4(開始循環(huán)時,此時暫元rownum為4)導(dǎo)出,帶上矩陣行列名,自動換行,居中

第2句:將矩陣desbytable的行數(shù)存至?xí)涸?code>rntable中;

第3句:更新暫元rownum,便于下次循環(huán);

第四部分:格式設(shè)置

putexcel c1:c`rownum',nformat(0.00)
putexcel d1:d`rownum',nformat(0.000)

將均值(C列)導(dǎo)出為保留2位小數(shù)的數(shù)值;標(biāo)準(zhǔn)差(D列)導(dǎo)出為保留3位小數(shù)的數(shù)值

4.最后效果

跑上述代碼的效果(因變量:P4Q4 P4Q5 P2Q1 P2Q2 P2Q3 P2Q4 P2Q5;分類變量:P4Q3 P4Q6 P4Q7)后:

共得到7+7*3=28個描述統(tǒng)計結(jié)果:


tabstat.gif

5. 補充

  • 根據(jù)實際需求修改,最終可實現(xiàn)批量導(dǎo)出多份數(shù)據(jù)的多個變量的描述統(tǒng)計和分類描述結(jié)果~

預(yù)期接下來:
stata結(jié)果導(dǎo)入excel-方差分析

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容