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

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

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

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

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

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

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

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

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

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

然后是各拷,交叉分析結(jié)果導(dǎo)出excel

1. 思路

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

  1. 在stata中將交叉結(jié)果形成矩陣(即交叉分析結(jié)果表)烤黍;
  2. 再將矩陣導(dǎo)入excel知市;
  3. 根據(jù)每個(gè)矩陣行數(shù),自動在上個(gè)矩陣結(jié)束后空一行速蕊,導(dǎo)入新的矩陣嫂丙;
  4. 通過循環(huán),只需添加變量名规哲,則自動生成新的表奢入;

2. 所有代碼

第一部分:設(shè)置
local rownums=1
local rntable=1
putexcel set result.xlsx,sheet("交叉分析",replace) modify

第二部分:循環(huán)
local rowvar "P4Q17 P2Q1 P4Q10"
local colvar "P4Q3 P4Q6 P4Q7 P4Q8"
foreach r of varlist `rowvar'{
foreach c of varlist `colvar'{

第三部分:交叉分析結(jié)果構(gòu)成矩陣
// 兩變量交叉分析
tab `r' `c',matcell(freq)
quietly fre `r',nov
local rlabel=r(lab_valid)
quietly fre `c',nov
local clabel=r(lab_valid)
// 頻率結(jié)果表
mata:st_matrix("rtotal", rowsum(st_matrix("freq")))
mat coljoin rfreq=freq rtotal
mat colnames rfreq=`clabel' "總計(jì)"
mata:st_matrix("ctotal", colsum(st_matrix("rfreq")))
mat colnames ctotal=`clabel' "總計(jì)"
mat rowjoin ftable=rfreq ctotal
mat rownames ftable=`rlabel' "總計(jì)"

local cn:colsof rfreq
local cns=`cn'+66
local cne=`cns'+`cn'
local cns=char(`cns')
local cne=char(`cne')

// 含行百分比結(jié)果
local cn:colsof ftable
mat rper=syminv(diag(ftable[1...,`cn']))*ftable
mat coljoin rtable=ftable rper

// 含列百分比結(jié)果
local rn:rowsof ftable
mat cper=ftable*syminv(diag(ftable[`rn',1...]))
mat coljoin ctable=ftable cper

第四部分:結(jié)果導(dǎo)出excel
// 行百分比結(jié)果導(dǎo)出excel
putexcel a`rownums'=matrix(rtable),names txtwrap
local rntable:rowsof rtable
local rownume=`rownums'+`rntable'
// 設(shè)置格式
putexcel `cns'`rownums':`cne'`rownume',nformat(#.00%) 
local rownums=`rownums'+`rntable'+2

// 列百分比結(jié)果導(dǎo)出excel
putexcel a`rownums'=matrix(ctable),names txtwrap
local rntable:rowsof ctable
local rownume=`rownums'+`rntable'
// 設(shè)置格式
putexcel `cns'`rownums':`cne'`rownume',nformat(#.00%) 
local rownums=`rownums'+`rntable'+2
}

3.代碼解釋

第一部分:設(shè)置

local rownums=1
local rntable=1
putexcel set result.xlsx,sheet("交叉分析",replace) modify

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

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

local rowvar "P4Q17 P2Q1 P4Q10"
local colvar "P4Q3 P4Q6 P4Q7 P4Q8"

foreach r of varlist `rowvar'{
foreach c of varlist `colvar'{

將行變量和列變量分別存至?xí)涸?code>rowvar和colvar中,之后只需要添加行變量和列變量就行。

第三部分:交叉分析結(jié)果構(gòu)成矩陣

// 兩變量交叉分析
tab `r' `c',matcell(freq)
quietly fre `r',nov
local rlabel=r(lab_valid)
quietly fre `c',nov
local clabel=r(lab_valid)

進(jìn)行交叉分析腥光,將頻率存成矩陣freq关顷,將行變量和列變量的值標(biāo)簽分別存至?xí)涸?code>rlabel,clabel

以行變量為P4Q17武福,列變量為P4Q3為例议双,矩陣freq,行變量標(biāo)簽rlabel捉片,列變量標(biāo)簽clabel分別為:

tab.png
 // 頻率結(jié)果表
mata:st_matrix("rtotal", rowsum(st_matrix("freq")))
mat coljoin rfreq=freq rtotal
mat colnames rfreq=`clabel' "總計(jì)"
mata:st_matrix("ctotal", colsum(st_matrix("rfreq")))
mat colnames ctotal=`clabel' "總計(jì)"
mat rowjoin ftable=rfreq ctotal
mat rownames ftable=`rlabel' "總計(jì)"

生成含行總計(jì)和列總計(jì)的頻率結(jié)果矩陣ftable

第1句:根據(jù)矩陣freq平痰,生成每行的總計(jì)矩陣rtotal:


矩陣rtotal.png

第2-3句:將矩陣freq和rtotal拼接成矩陣rfreq,并將矩陣rfreq的列名變?yōu)榱凶兞繕?biāo)簽和"總計(jì)":


矩陣rfreq.png

第4-5句:根據(jù)矩陣rfreq伍纫,生成每列的總計(jì)矩陣ctotal宗雇,并將矩陣ctotal的列名變?yōu)榱凶兞繕?biāo)簽和"總計(jì)":
矩陣ctotal.png

第6-7句:將矩陣rfreq和ctotal拼接成矩陣ftable,并將矩陣ftable的行名變?yōu)樾凶兞繕?biāo)簽和"總計(jì)":


矩陣ftable.png
local cn:colsof rfreq
local cns=`cn'+66
local cne=`cns'+`cn'
local cns=char(`cns')
local cne=char(`cne')

目的:用于后續(xù)循環(huán)時(shí)莹规,結(jié)果導(dǎo)入Excel的單元定位
第1句:將矩陣rfreq的列數(shù)存至?xí)涸?code>cn
第2-3句:將暫元cn+66赔蒲,得到暫元cns;再用暫元cns+暫元cn,得到暫元暫元cne
第4-5句:將數(shù)字轉(zhuǎn)為字母良漱,得到暫元cns和暫元cne
其中舞虱,暫元cns和暫元cne分別是百分比結(jié)果的開始列和結(jié)束列:

cn.png

// 含行百分比結(jié)果
local cn:colsof ftable
mat rper=syminv(diag(ftable[1...,`cn']))*ftable
mat coljoin rtable=ftable rper

目的:得到含行百分比的結(jié)果矩陣
第1句:將矩陣ftable的列數(shù)存至?xí)涸?code>cn
第2句:ftable[1...,cn']表示子矩陣,即矩陣ftable的最后1列母市;diag(ftable[1...,cn'])得到子矩陣的對角矩陣矾兜;syminv(diag(ftable[1...,cn']))得到對角矩陣的逆矩陣;mat rper=syminv(diag(ftable[1...,cn']))*ftable將逆矩陣乘以矩陣ftable患久,得到矩陣rper椅寺,效果為,將矩陣ftable的每列都除以最后1列蒋失,結(jié)果:

矩陣rper.png

第3句:將矩陣ftable和rper進(jìn)行拼接配并,得到含行百分比結(jié)果的矩陣rtable:
矩陣rtable.png

// 含列百分比結(jié)果
local rn:rowsof ftable
mat cper=ftable\*syminv(diag(ftable[`rn',1...]))
mat coljoin ctable=ftable cper

同理,得到列百分比矩陣cper和含列百分比的結(jié)果矩陣ctable:
注意:ftable\*syminv(diag(ftable[rn',1...]))`乘數(shù)位置和行百分比矩陣不同高镐!

矩陣cper.png

矩陣ctable.png

第四部分:結(jié)果導(dǎo)出excel

// 行百分比結(jié)果導(dǎo)出excel
putexcel a`rownums'=matrix(rtable),names txtwrap
local rntable:rowsof rtable
local rownume=`rownums'+`rntable'
// 設(shè)置格式
putexcel `cns'`rownums':`cne'`rownume',nformat(#.00%) 
local rownums=`rownums'+`rntable'+2

目的:將含行百分比結(jié)果導(dǎo)出Excel

第1句:見矩陣rtable導(dǎo)出Excel溉旋,從單元格A1(開始循環(huán)時(shí),暫元rownums為1)導(dǎo)出嫉髓;

第2句:將矩陣rtable的行數(shù)存至?xí)涸?code>rntable观腊,示例為3;

第3句:將暫元rownums(結(jié)果表開始行數(shù))加上暫元rntable(結(jié)果表行數(shù))得到暫元rownume算行,即結(jié)果表的結(jié)束行數(shù)梧油;

第4句:將百分比設(shè)為保留兩位小數(shù)的百分?jǐn)?shù)格式,示例單元格范圍是E1:H4

第5句:更新暫元rownums州邢,即下一個(gè)結(jié)果表開始行數(shù)儡陨;

// 列百分比結(jié)果導(dǎo)出excel
putexcel a`rownums'=matrix(ctable),names txtwrap
local rntable:rowsof ctable
local rownume=`rownums'+`rntable'
// 設(shè)置格式
putexcel `cns'`rownums':`cne'`rownume',nformat(#.00%) 
local rownums=`rownums'+`rntable'+2

同理,將含列百分比結(jié)果導(dǎo)出Excel

4.最后效果

跑上述代碼的效果(行變量:P4Q17 P2Q1 P4Q10;列變量:P4Q3 P4Q6 P4Q7 P4Q8)后:

共得到3*4=12個(gè)交叉結(jié)果骗村,每個(gè)交叉結(jié)果都呈現(xiàn)含行百分比和列百分比的結(jié)果表:


tab2.gif

5. 補(bǔ)充

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末胚股,一起剝皮案震驚了整個(gè)濱河市笼痛,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌琅拌,老刑警劉巖缨伊,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異进宝,居然都是意外死亡刻坊,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進(jìn)店門党晋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來谭胚,“玉大人,你說我怎么就攤上這事隶校÷┮妫” “怎么了蛹锰?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵深胳,是天一觀的道長。 經(jīng)常有香客問我铜犬,道長舞终,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任癣猾,我火速辦了婚禮敛劝,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘纷宇。我一直安慰自己夸盟,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布像捶。 她就那樣靜靜地躺著上陕,像睡著了一般。 火紅的嫁衣襯著肌膚如雪拓春。 梳的紋絲不亂的頭發(fā)上释簿,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天,我揣著相機(jī)與錄音硼莽,去河邊找鬼庶溶。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的偏螺。 我是一名探鬼主播行疏,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼砖茸!你這毒婦竟也來了隘擎?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤凉夯,失蹤者是張志新(化名)和其女友劉穎货葬,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體劲够,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡震桶,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了征绎。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蹲姐。...
    茶點(diǎn)故事閱讀 39,690評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖人柿,靈堂內(nèi)的尸體忽然破棺而出柴墩,到底是詐尸還是另有隱情,我是刑警寧澤凫岖,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布江咳,位于F島的核電站,受9級特大地震影響哥放,放射性物質(zhì)發(fā)生泄漏歼指。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一甥雕、第九天 我趴在偏房一處隱蔽的房頂上張望踩身。 院中可真熱鬧,春花似錦社露、人聲如沸挟阻。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽附鸽。三九已至,卻和暖如春孟害,著一層夾襖步出監(jiān)牢的瞬間拒炎,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工挨务, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留击你,地道東北人玉组。 一個(gè)月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像丁侄,于是被迫代替她去往敵國和親惯雳。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內(nèi)容