标签 Stata 下的文章

本文申明

  • 如果本文出现逻辑或者学术错误,请在本页留言或者联系作者邮箱(caoyongzhuo@qq.com[国内邮箱];warnerjulia866@gmail.com[国外邮箱])

  • 虽然Markdown语法优雅且规范,但由于博客采用复杂的显示模式,部分文字或表格会被浏览器转义为较丑样式,后期优化,还请谅解

  • 任何转载复用,请遵守 Creative Commons 国际准则,未经授权禁止商业用途

  • 未对接任何广告,下文推荐的数据分发平台均为作者亲测后推荐,读者可以自行选择阿里云[建议]、腾讯云[建议]、百度云[不建议]等大厂平台

  • 如需广告对接请移步上述邮箱或下述WX号,请说明来意,否则一律拒接

Stata安装

  • 本文使用 Stata17 MP 中文和谐版(永久激活序列号)编写,内置常用命令库,如需安装与作者相同版本的Stata或有数据分析、一对一辅导需求,请移步WX号:15624552379

image-20230113163316287

Stata导入数据

[-] 导入方式(为方便示例,都使用Excel数据,不考虑SQL数据库数据)

  • 使用代码导入


    1. 优点:对于超大型数据(一般是5w以上)的数据来说,使用代码导入更加快速,不易出错
    2. 缺点:要提前对于Excel数据进行分析整理
  • 使用Stata图形化界面导入


    1. 优点:对于中小型数据、不懂复杂数据结构的人来说是一种友好方式
    2. 缺点:不适合超大型数据导入

[-] 示例数据如下(请读者自行下载)

  • 为了博客运转速度不被大型文件拖垮,本文所有数据将全部托管于”七牛云CDN“进行转储并全球分发,请读者自行下载

  • 下载模式:点击加粗或高亮超链接文字跳转下载

  • 特别说明:七牛云CDN的付费挺贵的,希望不要有任何不怀好意之人使用网络下载器或爬虫频繁发起请求,博客安装了IP探针并且和公安联网,访客IP都将被记录存档,每12小时上传云端,如果遇到不法分子恶意请求或攻击,后果自负!

  • auto示例数据.xlsx下载

[-] 使用代码方式导入

cd "F:\STATA测试数据" //切换工作目录
clear //清除内存中的数据
set more off //设置结果滚动显示
import excel using "auto示例数据.xlsx", firstrow clear //更多参数请在命令行窗口输入 help import 进行详细语法查看
  • 工作目录以自己电脑的Excel文件存储地址为准,前三行是stata编码的三部曲
  • auto示例数据.xlsx是需要导入的文件名,具体以自己的文件名为准
  • firstrow参数是将Excel的第一行作为Stata变量名

image-20230113163923153

image-20230113164101176

  • clear参数是将目前Stata内存中的数据清楚
  • import的类型不止Excel一种,具体可以参考手册进行查看,手册查看方式:在命令行窗口输入 help import

[-] 使用Stata图形化界面导入

  • 打开Stata,在顶部选择”文件“?”导入“?”Excel电子表格“

image-20230114100637190

  • 在接下来的界面中,选择”浏览“?找到你”存放Excel的目录“?选择”工作表“?选择”单元格范围“?勾选”将第一行作为变量名“?点击”确定“

image-20230114102322326

image-20230114102440649

  • 此时数据已经导入Stata的数据管理器中,我们可以在右侧的<变量窗口##中看到导入的数据变量名(Excel表的第一行)

image-20230114102753628

  • 如果需要查看每一个变量名所对应的具体数值,我们可以点击Stata上方的数据编辑器

image-20230114103013997

数据类型、数据结构辨析

[-] Stata的常用数据类型

  • str --- 字符串类型 (在Stata 17的数据管理器中显示为黄色)
  • byte --- 字节类型 (在Stata 17的数据管理器中显示为白色)
  • int --- 整形类型 (在Stata 17的数据管理器中显示为白色)
  • double --- 数值类型 (在Stata 17的数据管理器中显示为蓝色)

认识基本的数据类型有助于后期在数据预处理过程中如merge、append、duplicates drop等命令的正常运行

[-] Stata的常用数据结构

  • 截面数据 --- 作者口诀:多个体,单时间
  • 时间序列数据 --- 作者口诀:单个体,多时间
  • 面板数据 --- 作者口诀:多个体,多时间


作者在此处使用 山东大学 - 陈强 -《高级计量经济学》中的课件进行阐释,陈强博客地址:http://www.econometrics-stata.com/col.jsp?id=101


  1. 截面数据
2013 年中国分省 GDP (亿元)
省份 GDP
北京 19500.56
天津 14370.16
河北 28301.41
山西 12602.24
内蒙古 16832.38
辽宁 27077.65
吉林 12981.46
黑龙江 14382.93
上海 21602.12
江苏 59161.75
浙江 37568.49
安徽 19038.87
福建 21759.64
江西 14338.5
山东 54684.33
河南 32155.86
湖北 24668.49
湖南 24501.67
广东 62163.97
广西 14378
海南 3146.46
重庆 12656.69
四川 26260.77
贵州 8006.79
云南 11720.91
西藏 807.67
陕西 16045.21
甘肃 6268.01
青海 2101.05
宁夏 2565.06
新疆 8360.24
  1. 时间序列数据
1994-2013 年山东省 GDP (亿元)
年份 GDP
1994 3844.5
1995 4953.35
1996 5883.8
1997 6537.07
1998 7021.35
1999 7493.84
2000 8337.47
2001 9195.04
2002 10275.5
2003 12078.2
2004 15021.8
2005 18366.9
2006 21900.2
2007 25776.9
2008 30933.3
2009 33896.6
2010 39169.9
2011 45361.9
2012 50013.2
2013 54684.3
  1. 面板数据
1994-2013 年中国分省 GDP (亿元)
省份 年份 GDP
北京 1994 1145.31
北京 1995 1507.69
... ... ...
北京 2012 17879.4
北京 2013 19500.56
天津 1994 732.89
天津 1995 931.97
... ... ...
天津 2012 12893.88
天津 2013 14370.16
... ... ...
新疆 1994 662.32
新疆 1995 814.85
... ... ...
新疆 2012 7505.31
新疆 2013 8360.24

在一般情况下,对于面板数据,我们可以拆分成截面数据和时间序列数据,但是这个过程无法逆向拆分,只可以逆向补充。原因是面板数据作为多个体、多时间的数据结构来说,想要拆分成截面数据的话,只需要提取单个时间节点的数据;想要拆分成时间序列数据的话,只需要提取单个个体的数据,这是一个十分有趣的过程,在下面我们进行详细介绍。

[-] 面板数据拆分为截面数据

** 面板数据拆分截面数据演示
cd "F:\STATA测试数据" //切换工作目录
clear //清除内存中的数据
set more off //设置结果滚动显示
import excel using "1994-2013年分省.xlsx", firstrow clear //导入面板数据

image-20230114144448416

  • 我们假设只需要截取1994年的界面数据
keep if 年份 == 1994 //第一种方式,使用keep保留符合要求的数据
drop if 年份 != 1994 //第二种方式,使用drop删除不符合要求的数据


此处Markdown语法与Stata语法出现了转义,请读者按照下图第14行代码中的"!="描述<不等于##逻辑判断


image-20230114145114977

[-] 面板数据拆分为时间序列数据

keep if 省份 == "北京" //第一种方式,使用keep保留符合要求的数据
drop if 省份 != "北京" //第二种方式,使用drop删除不符合要求的数据


此处Markdown语法与Stata语法出现了转义,请读者按照下图第14行代码中的"!="描述<不等于##逻辑判断


image-20230114181202928

字符串拼接

[-] 原始数据结构

| var1 | var2 | //变量名

% str % str % //数据类型

[-] 语法

gen new_var = var1 + var2

[-] 示例原始数据

| var1 | var2 |
| 12345| 5678 |

[-] 示例语法

gen sum_string = var1 + var2

[-] 示例结果数据

| var1 | var2 | sum_string | //变量名
| 12345 | 5678 | 123455678 | //变量名所对应的数值

字符串拆分

[-] 原始数据结构

| sum_string |

% str %

[-] 语法

gen new_var = substr(sum_string,m,n)

  • m : 从单元格第几个字符开始
  • n :从开始字符选择几个字符
  • 注意:一个汉字占用2个字符,一个数字占用1个字符

[-] 示例原始数据

| sum_string |

| 12345678 |

[-] 示例语法

gen var3 = substr(sum_string,2,4)

[-] 示例结果数据

| var3 |

| 2345 |

分组求和(单、多层级)

[-] 原始数据结构

数据结构不限

[-] 语法

bysort var1 : egen new_var = sum(var2) // 以var1为分类,对var2分组求和

bysort var1 var3 : egen new_var = sum(var2) // 以var1为一级分类,var3为二级分类,对var2分组求和

  • 其中的sum()函数可以更换为count()分组计数、max()分组求最大值
  • 其中的new_var变量名换成自己想要的就行

[-] 示例原始数据

| var1 | var2 | var3 |
| 1 | 3 | A |
| 1 | 2 | A |
| 1 | 2 | A |
| 1 | 3 | B |
| 1 | 2 | B |
| 1 | 3 | B |
| 2 | 1 | A |
| 2 | 1 | A |
| 2 | 2 | A |
| 2 | 2 | B |
| 2 | 2 | B |

[-] 示例语法

bysort var1 var3 : egen newvar = count(var2)

[-] 示例结果数据

| var1 | var2 | var3 | new_var |
| 1 | 3 | A | 3 |
| 1 | 2 | A | 3 |
| 1 | 2 | A | 3 |
| 1 | 3 | B | 3 |
| 1 | 2 | B | 3 |
| 1 | 3 | B | 3 |
| 2 | 1 | A | 3 |
| 2 | 1 | A | 3 |
| 2 | 2 | A | 3 |
| 2 | 2 | B | 3 |
| 2 | 2 | B | 3 |

20191254133-曹永卓实验报告-01

20191254133-曹永卓实验报告-02-1

20191254133-曹永卓实验报告-03

20191254133-曹永卓实验报告-04

20191254133-曹永卓实验报告-05

20191254133-曹永卓实验报告-06

20191254133-曹永卓实验报告-07

20191254133-曹永卓实验报告-08

20191254133-曹永卓实验报告-09

20191254133-曹永卓实验报告-10

20191254133-曹永卓实验报告-11

20191254133-曹永卓实验报告-12

20191254133-曹永卓实验报告-13

20191254133-曹永卓实验报告-14

20191254133-曹永卓实验报告-15

20191254133-曹永卓实验报告-16

20191254133-曹永卓实验报告-17

20191254133-曹永卓实验报告-18

20191254133-曹永卓实验报告-19

20191254133-曹永卓实验报告-20

20191254133-曹永卓实验报告-21

20191254133-曹永卓实验报告-22

20191254133-曹永卓实验报告-23

20191254133-曹永卓实验报告-24

20191254133-曹永卓实验报告-25

20191254133-曹永卓实验报告-26

20191254133-曹永卓实验报告-27

20191254133-曹永卓实验报告-28

20191254133-曹永卓实验报告-29

  • 课程论文 有所借鉴
  • 未经授权 严禁复制
  • 非专业化本硕博论文
  • 仅做数据回归联系 无学术不端(未发表)
  • 如有错误请联系我修正
  • 邮箱号码1:CAOYONGZHUO@QQ.COM
  • 邮箱号码2:WARNERJULIA866@GMAIL.COM

一、软件、环境及数据

  1. 软件为Stata14便携版
  2. 系统环境为Win10
  3. 数据文件结构如下
code region year FDI time policy_year hsr ...
//由于课程还未完结,所以不交代完整数据结构(不影响此文阅读)

二、作业踩坑合集

(一)数据导入失败

导入数据失败

使用 import excel xxx.xlsx 命令以后报错
//报错内容 element not find

一开始以为是命令使用错误,然后使用Stata自带的工具进行导入,依旧如下报错。

软件导入

element not find

错误原因:

excel数据表使用了过多的计算函数,如SUM,AVG等,如果有跨表连接,也会报错。

解决办法:

新建一张工作簿,将原工作表复制,选择“仅文字黏贴”进新的工作簿,在Stata中导入新的工作簿。问题解决成功。

问题解决

(二)安装命令失败

安装命令失败

ssc install xxx
//命令报错 xxx not find at ssc

错误原因:

ssc库中缺少这样的命令,类似于Python自身库没有request库一样,需要我们在线检索安装。

解决办法:

findit xxx
//输入如上命令 xxx替换为要安装的命令
//然后按照下面的图执行

安装命令失败解决办法1-1

安装命令失败解决办法1-2

(三)设置面板数据报错

repeated time values within panel

错误原因:

我购买的数据里有重复记录值,所以删除重复值即可。

解决办法:

duplicates report个体 年份//检查个体年份是否能唯一识别
duplicates example个体 年份//举例子看哪里数据重复
duplicates drop个体 年份,force //强制删除重 复数据
tsset 个体年份
//再次设置面板数据
xtdes
//查看数据.

//例如我自己的数据
duplicates report FDI year/检查个体年份是否能唯一识别
duplicates example FDI year//举例子看哪里数据重复
duplicates drop FDI year,force //强制删除重 复数据
tsset 个体年份

(四)绘制趋势图天坑

  1. 设定面板的时候保持"地区变量"在前,"时间变量"在后
  2. 查看自己“地区变量”大致有多少个,如23个省
  3. 如果"地区变量"超越30个且数据量高达三四万,那么建议你看看自己的电脑配置带不带的动
//如果出现以下报错,说明Stata炸了

数据过载

错误原因:

数据量太大,并且"地区变量"过多,计算过载(反正我是这么理解的)

解决办法:

//框定特定地区来绘图
*例如:使用20个城市绘制时间趋势图*
xtline FDI if region=="Anqing" | region=="Ankang" | region=="Anshun" | region=="Anyang" | region=="Baicheng" | region=="Baicheng" | region=="Baise" | region=="Baishan" | region=="Baiyin" | region=="Baoding" | region=="Baoji" | region=="Baoshan" | region=="Baotou" | region=="Bayannaoer" | region=="Bazhong" | region=="Beihai" | region=="Bengbu" | region=="Benxi" | region=="Bozhou" | region=="Cangzhou" | region=="Changde" 

过载效果

过载效果看不清

正常效果

20城市时间趋势

(五)输出回归结果问题

因为要做混合,固定效应,随机效应等多个回归,所以如果每次都使用outreg2输出一次,然后再将结果合并在一起,那么未免有点浪费时间和精力,所以我推荐使用asdoc命令来输出回归结果,非常强大。

outreg2命令输出结果演示

reg FDI hsr pinci labor 
est store model2
outreg2[model2] using tab02,word replace se tdec(3) bdec(3)

asdoc命令输出结果演示

asdoc reg FDI hsr pinci labor, nest replace
//就这一行!
//是不是很简洁!

回归结果:

asdoc1

asdoc其他命令详述及演示

  1. 竖向追加回归结果
asdoc xtreg FDI hsr pinci labor,fe r nest append
//追加个体固定回归效应(聚类标准误)

回归结果:

asdoc2

  1. 横向放置回归表格
asdoc reg FDI hsr pinci labor, replace wide

回归结果:

wide1

  1. 横向追加回归结果
asdoc xtreg FDI hsr pinci labor,fe r wide

回归结果:

wide2

(六)截面数据设置面板数据

今天金融工程课上手写的,反正我听不懂,就手写了这个教程。(字很丑还写歪了,凑合看看吧。)

截面数据转换面板数据_2

三、后续有待补充...

关于自回归和异方差的坑回头再说吧,我好累,睡一会学专业课了,感觉考研要BBQ了/(ㄒoㄒ)/~~

一、作业要求(数据文件homework.dta)

  • 画出ln_wage和tenure的散点图以及拟合曲线。
  • 以ln_wage为被解释变量,以age、race、msp、grade、south、union为解释变量,做描述性统计分析,给出变量之间的相关性水平,做普通最小二乘回归(报告估计系数、t统计值、F值、R2、观测值个数),以上结果以表格形式输出。
  • 以ln_wage为被解释变量,以age、msp、south、union为解释变量,做个体固定效应回归(在idcode层面做聚类稳健标准误),以表格形式输出回归结果,报告组间R2。
  • 以ln_wage为被解释变量,以age、msp、south、union为解释变量,做个体随机效应回归,以表格形式输出回归结果,报告组内R2。
  • 利用hausman检验判断应该是个体固定效应回归还是个体随机效应回归,报告hausman统计值。
  • 数据文件下载地址

二、代码文件如下(如有错误,请指正)

*切换路径*
clear
cd "F:\数学建模\计量经济学\homework" //数据文件所在目录
set more off
use homework.dta //使用homework.dta
*1.1绘制ln_wage和tenure散点图*
scatter ln_wage tenure
*1.2绘制ln_wage和tenure拟合优度*
twoway (lfit ln_wage tenure)
*补充:ln_wage和tenure散点图和拟合优度复合*
twoway (scatter ln_wage tenure ) (lfit ln_wage tenure)
*2.1.1给出一般描述性统计结果*
su ln_wage age race msp grade south union,de
*2.1.2给出详细描述性统计结果*
tabstat ln_wage age race msp grade south union, stat( mean sd p5 p25 med p75 p95 min max )
*2.2给出变量之间的相关性水平*
pwcorr   ln_wage age race msp grade south union,star(0.05)
*2.3普通最小二乘回归*
reg ln_wage age race msp grade south union
*2.4使用outreg2命令输出结果*
est store Result
//保留R²,F统计量,样本回归系数(保留三位小数),T统计量(保留两位小数)
outreg2 [Result] using Result.xsl, replace tstat e(r2,F) bdec(3) tdec(2)
*3.1告诉stata该数据为面板数据(工资ln_wage和年份year)*
xtset idcode year
*3.2个体固定效应回归(在idcode层面做聚类稳健标准误)*
xtreg ln_wage age msp south union ,fe vce(cluster idcode)
*3.3输出结果,汇报组间R² *
est store Xtreg_Fe
outreg2 [Xtreg_Fe] using Xtreg_Fe.xsl, replace tstat e(r2_b) 
*4.1个体随机效应回归(在idcode层面做聚类稳健标准误)*
xtreg ln_wage age msp south union i.year,re vce(cluster idcode)
*4.2输出结果,汇报组内R² *
est store Xtreg_Re
outreg2 [Xtreg_Re] using Xtreg_Re.xsl, replace tstat e(r2_w) 
*利用hausman检验判断应该是个体固定效应回归还是个体随机效应回归*
//个体固定回归(不做聚类稳健标准误)
xtreg ln_wage age msp south union ,fe 
est store Xtreg_Fe_1
//个体随机回归(不做聚类稳健标准误)
xtreg ln_wage age msp south union i.year,re
est store Xtreg_Re_1
//计算hausman
hausman Xtreg_Fe_1 Xtreg_Re_1,constant sigmamore

三、数据结果的图文说明

切换路径*
clear
cd "F:\数学建模\计量经济学\homework" //数据文件所在目录
set more off
use homework.dta  //使用homework.dta 

1. 画出ln_wage和tenure的散点图以及拟合曲线。

1.1绘制ln_wage和tenure散点图*
scatter ln_wage tenure

img

1.2绘制ln_wage和tenure拟合优度*
twoway (lfit ln_wage tenure)

img

补充:ln_wage和tenure散点图和拟合优度复合*
twoway (scatter ln_wage tenure) (lfit ln_wage tenure)

img

2. 以ln_wage为被解释变量,以age、race、msp、grade、south、union为解释变量,做描述性统计分析,给出变量之间的相关性水平,做普通最小二乘回归(报告估计系数、t统计值、F值、R2、观测值个数),以上结果以表格形式输出。

2.1.1给出一般描述性统计结果*
su ln_wage **age race msp grade south union,**de
*2.1.2给出详细描述性统计结果*
tabstat ln_wage **age race msp grade south union,** stat**(** mean sd p5 p25 med p75 p95 min max **)

img

2.2给出变量之间的相关性水平*
pwcorr  ln_wage **age race msp grade south union,**star**(0.05)

img

2.3普通最小二乘回归*
reg ln_wage **age race msp grade south union**
*2.4使用outreg2命令输出结果*
est store **Result**
//保留R²,F统计量,样本回归系数(保留三位小数),T统计量(保留两位小数)
outreg2 **[Result] using** Result.xsl**, replace** tstat **e(r2,F) bdec(3) tdec(2)

回归结果如下:

img

结果报告:**
​                    **age   race  msp   grade  south  union  Constant**
**估计系数:[0.009]  [-0.051] [-0.016] [0.078] [-0.124]  [0.182]  [0.552]**
**T统计量:(-19.65)  (-8.03) (-2.60)  (-62.33) (-20.02) (-26.05) (-23.75)**
​    **F值:1145**                  **R2:0.263**                 **Obs:19213

3. 以ln_wage为被解释变量,以age、msp、south、union为解释变量,做个体固定效应回归(在idcode层面做聚类稳健标准误),以表格形式输出回归结果,报告组间R2。

*3.1告诉stata该数据为面板数据(工资ln_wage和年份year)*
xtset idcode year
*3.2个体固定效应回归(在idcode层面做聚类稳健标准误)*
xtreg ln_wage age msp south union ,fe vce(cluster idcode)

img

*3.3输出结果,汇报组间R² *
est store Xtreg_Fe
outreg2 [Xtreg_Fe] using Xtreg_Fe.xsl, replace tstat e(r2_b)

结果如下:

img

结果报告:组间R2的值为 0.0711

4. 以ln_wage为被解释变量,以age、msp、south、union为解释变量,做个体随机效应回归,以表格形式输出回归结果,报告组内R2。

***4.1****个体随机效应回归(在****idcode****层面做聚类稳健标准误)*******
xtreg ln_wage age msp south union i.year**,**re **vce(**cluster **idcode)

img

***4.2****输出结果,汇报组内****R² \***
est **store** Xtreg_Re
outreg2 **[**Xtreg_Re**] using** Xtreg_Re.xsl**,** replace **tstat e(r2_w)

结果如下:

img

结果报告:组内R2的值为 0.101

5. 利用hausman检验判断应该是个体固定效应回归还是个体随机效应回归,报告hausman统计值

*****利用****hausman****检验判断应该是个体固定效应回归还是个体随机效应回归*******
**//****个体固定回归(不做聚类稳健标准误)**
xtreg **ln_wage age msp south union ,**fe 
est **store Xtreg_Fe_1

img

//****个体随机回归(不做聚类稳健标准误)**
xtreg ln_wage age msp south union **i.year,**re
est **store** Xtreg_Re_1

img

//****计算****hausman**
hausman Xtreg_Fe_1 Xtreg_Re_1**,constant** sigmamore

img

hausman结果报告: chi2值为107.18 ,同时 P统计量 = 0.000 < 0.05结果显著。**
​                  **拒绝原假设(H0:** **个体随机效应回归),采用(个体固定效应回归)

++++++++++++++++++++++++++ 计量经济学 Copyright By © 学金融的文科生 ++++++++++++++++++++++++++