美文网首页
stata结果导入excel-频率分析

stata结果导入excel-频率分析

作者: Hobbit的理查德 | 来源:发表于2020-02-18 00:04 被阅读0次

    前段时间知道stata16可以直接导入SPSS数据,就把stata16安装了

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

    最开始,是里面的Reproducible reporting吸引我,毕竟一直在想着怎么写动态分析报告,即分析结果和报告同步更新。

    就研究了一下里面提到的dyndocputexcelputword命令

    首先,就是研究了putexcel命令,想着把频率分析结果能直接导入excel,尤其是有大量变量的时候

    简单尝试了一下,发现还是很好用,尤其是导出来中文不会乱码,而且格式自定义,其他命令如logoutasdoc等都有各种问题的。

    接下来,分不同帖子写写不同分析结果如何批量导出结果至excel,

    首先是,频率分析结果导入excel

    1. 思路

    1. 在stata中将频率分析结果形成矩阵(即结果表);
    2. 再将矩阵导入excel;
    3. 根据每个矩阵行数,自动在上个矩阵结束后空一行,导入新的矩阵;
    4. 将变量存成暂元,只需添加变量名,则自动生成新的表;

    2. 所有代码

    use data_analysis,clear
    putexcel set result.xlsx,sheet("单变量",replace) modify
    local rownum=1
    local rntable=1
    local frevar "P4Q3 P4Q6 P4Q7 P4Q8 P4Q9 P4Q10 P4Q11 P4Q1 P4Q2"
    foreach var of varlist `frevar'{
    fre `var',nov
    putexcel A`rownum'="`r(label)'",hcenter vcenter txtwrap bold
    mat freq=r(valid)
    matrix rownames freq=`r(lab_valid) '
    matrix colnames freq="频率"
    mat vper=(freq/r(N_valid))
    matrix colnames vper="百分比"
    mat vtotal=(r(N_valid),1)
    matrix rownames vtotal="总计"
    matrix colnames vtotal="频率" "百分比"
    matrix coljoinbyname table=freq vper
    matrix rowjoinbyname table=table vtotal
    putexcel A`rownum'=matrix(table),names hcenter vcenter
    local rntable:rowsof table
    local rownum=`rownum'+`rntable'+2
    putexcel c1:C`rownum',nformat(#.00%) 
    }
    

    3.代码解释

    use data_analysis,clear
    

    调用数据

    putexcel set result.xlsx,sheet("单变量",replace) modify
    

    在工作目录下生成result.xlsx文件,并在其中生成"单变量"的工作表,重新运行代码时,replace更新工作表中内容,modify表示修改excel文件

    local rownum=1
    local rntable=1
    

    设置初始暂元rownumrntable的值,用于后续循环

    local frevar "P4Q3 P4Q6 P4Q7 P4Q8 P4Q9 P4Q10 P4Q11 P4Q1 P4Q2 P4Q16"
    

    将要进行频率分析的变量名存至暂元frevar中,后续循环中循环这个暂元中的变量就可以进行相同的处理了,这里的变量可以随意增加

    foreach var of varlist `frevar'{
    

    开始循环

    fre`var',nov
    

    命令fre需要自行安装,ssc install fre

    可以对数值型或者文本型的变量都进行频率分析,novalue选项表示结果中不显示值,只显示值标签,结果如下:

    fre.png
    可以存储值标签或者文本型变量的分类文本,通过输入return list可以看到上述命令存储的结果: fre存储结果.png

    其中,r(N)为样本总量,r(N_valid)为有效样本量,r(N_missing)为缺失值数量,r(r)为总的类别数量,r(r_valid)为有效值类别数量,r(r_missing)为缺失值类别数量,r(depvar)为变量名,r(label)为变量标签;

    r(valid)为有效样本频率结果矩阵,通过输入matlist r(valid)可以知道矩阵内容:

    矩阵.png

    有这些结果进行组合就可以生成想要的频率分析结果了~

    putexcel A`rownum'="`r(label)'",hcenter vcenter txtwrap bold
    

    由于最开始循环时暂元rownum为1,所以,表示,在excel的单变量工作表中的A1单元格导入变量标签,hcenter vcenter txtwrap bold分别表示单元格水平居中,垂直居中,自动换行,以及加粗

    变量标签.png
    mat freq=r(valid)
    matrix rownames freq=`r(lab_valid) '
    matrix colnames freq="频率"
    

    频率结果矩阵:
    第一句:将矩阵r(valid)命名为freq
    第二句:将矩阵freq的行名称改为值标签
    第三句:将矩阵freq的列名称改为“频率”

    结果如下:


    矩阵freq.png
    mat vper=(freq/r(N_valid))
    matrix colnames vper="百分比"
    

    生成百分比矩阵:
    第一句:矩阵计算,将矩阵freq除以有效样本量,得到矩阵vper
    第二句:把矩阵vper的列名改为”百分比“
    结果如下:


    矩阵vper.png
    mat vtotal=(r(N_valid),1)
    matrix rownames vtotal="总计"
    matrix colnames vtotal="频率" "百分比"
    

    合计结果矩阵:
    第一句:生成矩阵vtotal,该矩阵为1行2列,值分别为有效样本量和1
    第二句:将矩阵freq的行名称改为"总计"
    第三句:将矩阵freq的列名称改为“频率”和"百分比"
    结果如下:


    矩阵vtotal.png
    matrix coljoinbyname table=freq vper
    matrix rowjoinbyname table=table vtotal
    

    将上述三个矩阵进行拼接:
    第一句:矩阵fre和vper进行拼接,增加列数,生成矩阵table
    第二句:矩阵table和vtotal进行拼接,增加行数,更新矩阵table
    结果如下:


    矩阵table.png
    putexcel A`rownum'=matrix(table),names hcenter vcenter
    

    将矩阵table导出到excel中,同上,由于最开始循环时暂元rownum为1,所以,表示,在excel的单变量工作表中的A1单元格导入矩阵table,names分别表示将矩阵的行列名称均导出
    结果如下:

    频率结果.png
    local rntable:rowsof table
    local rownum=`rownum'+`rntable'+2
    

    更新暂元rntable:将矩阵table的行数存至rntable
    更新暂元rownum:将之前的rownum值加矩阵table的行数再加2,
    (例如,循环第一个变量时,rownum为1,rntable为3,则此时rownum为6,循环下一个变量的时候就可以从A6开始导入)

    putexcel c1:C`rownum',nformat(#.00%) 
    

    将C列,即百分比这列的格式设置为保留两位小数的百分比格式
    结果如下:


    百分比格式修改.png

    4.最后效果

    跑上述代码的效果(多个变量P4Q3 P4Q6 P4Q7 P4Q8 P4Q9 P4Q10 P4Q11 P4Q1 P4Q2 P4Q16),


    多个变量频率结果.png

    5. 补充

    • 根据实际需求修改,最终可实现批量导出多份数据的多个变量的频率结果~

    • 其实,putexcel命令stata15就有了,一直没有仔细研究,现在发现这和分析后的存储结果以及矩阵很相关~感觉更理解stata里的矩阵了。

    • 目前,还体验过的stata16其他功能:

      1. do文件:自动补全命令;
      2. 数据编辑窗口:可以手动调节宽度;
      3. 和python的交互,这样可以用python爬数据后用stata进行统计分析,或者用stata将分析结果导出excel,再用python进行调整;(刚学完python爬数据,到时候再写写stata和python的交互)
      4. 可以在内存中同时存多个数据,命令frame;
    • 预期接下来:
      stata结果导入excel-多重响应
      stata结果导入excel-交叉分析
      stata结果导入excel-描述统计
      stata结果导入excel-方差分析

    相关文章

      网友评论

          本文标题:stata结果导入excel-频率分析

          本文链接:https://www.haomeiwen.com/subject/iodwfhtx.html