前段時間知道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)出來中文不會亂碼颅拦,而且格式自定義蒂誉,其他命令如logout
,asdoc
等都有各種問題的距帅。
接下來右锨,分不同帖子寫寫不同分析結(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:
- 在stata中將描述統(tǒng)計分析結(jié)果形成矩陣(即描述統(tǒng)計分析結(jié)果表)恩敌;
- 再將矩陣導(dǎo)入excel瞬测;
- 根據(jù)每個矩陣行數(shù),自動在上個矩陣結(jié)束后空一行,導(dǎo)入新的矩陣涣楷;
- 通過循環(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為例:
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句:進(jìn)行描述統(tǒng)計分析睦授,得到因變量的樣本量,均值摔寨,標(biāo)準(zhǔn)差去枷,最小值,中位數(shù)和最大值統(tǒng)計量是复。
注意:添加選項save
删顶,得到統(tǒng)計結(jié)果矩陣r(StatTotal)
第2句:對矩陣r(StatTotal)進(jìn)行轉(zhuǎn)置,加單引號淑廊,得到矩陣destable逗余;
第3句:將矩陣destable的列名修改成樣本量,均值季惩,標(biāo)準(zhǔn)差录粱,最小值,中位數(shù)和最大值
第4句:將矩陣destable的行名修改成因變量的變量標(biāo)簽
矩陣destable:
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為分類變量為例:
tabstat `d',s(n mean sd min median max) by(`i') save
分類描述統(tǒng)計分析鹅很,添加選項save
保存結(jié)果嘶居,其中,每行結(jié)果存為了1個矩陣:
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句:對合并后的矩陣進(jìn)行轉(zhuǎn)置,得到分類描述統(tǒng)計矩陣desbytable佑吝;
第7-8句:對矩陣desbytable加上行列名坐昙;
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é)果:
5. 補充
- 根據(jù)實際需求修改薪铜,最終可實現(xiàn)批量導(dǎo)出多份數(shù)據(jù)的多個變量的描述統(tǒng)計和分類描述結(jié)果~
預(yù)期接下來:
stata結(jié)果導(dǎo)入excel-方差分析