Stata 概述

Stata = statistics + data(统计分析+数据处理)

Stata 是一套提供其使用者数据分析、数据管理以及绘制专业图表的完整及整合性统计软件。它提供许许多多功能,包含线性混合模型、均衡重复反复及多项式普罗比模式。用Stata绘制的统计图形相当精美。

  • Stata的优势
    (1)Stata数据处理功能强大、快捷,提供了大量的函数。
    (2)Do-files 非常便利,帮助一次性执行多条命令,使实证分析工作具有可重复性。
    (3)绘图精美。
    (4)更新快、平台宽。

Stata软件简介

进入Stata的安装目录。

其中ado文件是最核心部分,ado下的base文件夹存放了Stata所有官方命令背后对应的ado程序。

updates中存放定期更新后对应的辅助文件。

plus中存放安装的插件。

(1)Stata的主界面

stata软件和python stata软件优缺点_数据


review窗口中的命令需要再次执行时,只需双击。(2)菜单

file中,import和export用与传入和传出转化不同类型数据文件。

example dataset是Stata提供的一些范例数据。

stata软件和python stata软件优缺点_Stata_02


点击describe查看数据的详细信息。

点击use调用该数据。

stata软件和python stata软件优缺点_stata软件和python_03


输入命令绘制数据的散点图

scatter price wei

stata软件和python stata软件优缺点_数据_04


Data中存放有关数据处理的操作。

Graphics中存放有关绘图的操作。

Statistics中存放有关统计分析的操作。

Window用于窗口布局。

Edit中的Preferences用于偏好设定。若操作中需要使用中文文字,则需要将Blod前的勾全部去掉。

stata软件和python stata软件优缺点_Stata_05


设定好后在Edit–》Preferrences–》Save Preference set 中保存偏好设置。

Edit–》Preferrences–》Graph Preferences用于设定绘图模板。

Help中PDF documentation是Stata的电子手册。(3)菜单条

除了使用Command和菜单栏点击执行命令外,使用菜单条的New Do-file Editor来打开一个新的文本编辑器。

stata软件和python stata软件优缺点_stata软件和python_06


用于将Command中输入的命令整合输入文本文件,方便工作延续和还原操作。

Stata文件路径

Stata工作原理是从硬盘中调取数据,存入内存后经过一系列统计和回归分析运算,再将相应的结果输出和存储到硬盘。
连玉君老师的puls外部命令包

sysdir
* 用于查看系统工作路径

stata软件和python stata软件优缺点_stata软件和python_07

sysdir set PLUS "E:\Stata15\ado\plus\"
sysdir set PERSONAL "E:\Stata15\ado\personal\"
sysdir set OLDPLACE "E:\Stata15\ado\"
* 用于修改系统工作路径

stata软件和python stata软件优缺点_stata软件和python_08

help <指令>
* 用于查看指令的详细信息
ssc install <指令>
* 用于当找不到指令时,安装外部指令

【工作路径】
(1)当前工作路径
Stata的左下角显示当前的工作路径,如果使用use调用数据,则默认从该目录下调入数据。

(2)更改文件路径

cd "<指定路径>"
* 例如 "D:\stata15\ado\personal"

(3)显示当前路径下的文件信息

dir

(4)打开当前工作路径下的文件夹“_data”

cd _data

(5)进入当前路径的windows操作界面

cdout

(6)调入当前路径下的数据“GTAs_2008.dta”

use "GTAs_2008.dta", clear
* clear 表示清除已被占用的内存

(7)调入指定目录下的数据“GTAs_2008.dta”

use "D:\stata15\ado\personal\_data\GTAs_2008.dta", clear

(8)设置全局暂元

global path "D:\stata15\ado\personal\"
* 此时使用数据只需引用全局暂元名称,再在引用路径的基础上加上相对路径即可
use "$path\_data\GTAs_2008.dta", clear
* $用于引用全局暂元

【文件和文件夹管理】
(1)显示当前工作路径

pwd

(2)显示当前工作路径下所有包含链接的文件信息

expl

(3)列举当前工作路径下所有文件

lall
* list all

stata软件和python stata软件优缺点_数据_09


view——浏览文件

edit——编辑文件

do——执行文件

(4)批量修改文件名称

help fpref 			// 在文件名中批量添加前缀或后缀
help fren			// 批量修改文件名中的字段
help renfiles		// 批量修改文件名

【stata系统文件设定】

(1)系统文件

stata软件和python stata软件优缺点_stata软件和python_08


UPDATES——Stata更新的所有文件

BASE——Stata官方命令对应的所有程序文件和说明文档

PULS——外部命令

PERSONAL——个人文件夹,常用语存放数据和相应程序

OLDPLACE——常用于存放自己编写的命令

(2)命令执行过程
编写命令让Stata执行
–》从BASE文件夹中找一个同名的ado文件,找到则执行
–》若BASE中没有,则在UPDATES中寻找
–》若UPDATES也没有,则在PLUS中寻找
–》若以上目录均找不到,则Stata输出无法识别命令

(3)可识别程序文件的目录

adopath

stata软件和python stata软件优缺点_Stata_11


每执行一条新的命令时,会在以上几个路径下搜索同名的程序文件来执行。

(4)增加可识别程序文件的文件目录

adopath + "E:\Stata15\ado\personal\My_stata\_plus"

stata软件和python stata软件优缺点_数据_12


(5)Stata开机自启动基本设定

将以下指令保存至Stata的根目录下,并命名为profile.do。

* 基本参数设定
set type double					// 	后续产生变量都将是双精度型的
set memory						// 为stata分配50M内存
set matsize 2000				// 矩阵维度
set scrollbufsize 50000			// 设定屏幕的最大显示行数
set more off, perma				// 不分屏显示

* log文件设定
log using "E:\Stata15\ado\personal\stata.log", text replace
cmdlog using "D:\Stata15\ado\personal\command.log", append

* 文件目录设定
sysdir set PLUS "E:\Stata15\ado\plus"		// 外部命令的存放地址
sysdir set OLDPLACE "E:\ado"
sysdir set PERSONAL "E:\stata15\ado\personal"	// 个人文件夹

* ado文档查找路径
adopath + "E:\Stata15\ado\personal"
adopath + "E:\Stata15\ado\personal\_Myado"

* 指定默认工作路径
cd "E:\Stata15\ado\personal"

这样在重新打开Stata是就会running E:\Stata15\profile.do 导入基本设定

还可以在profile文件中加入以下命令来确定每次启动时运行的盘符。

dis _n(30)
if "`c(sysdir_stata)'" == "D:\Stata15/" | "`c(sysdir_stata)'" == "d:\Stata15/"{
	local D "D"
}
else{
	dis in w "请在command窗口输入Stata所在的盘符,按回车键:______"
	dis in w "Here is my Stata: " _request(isD)
	local D "$isD"
}

在profile文件中加入以下指令,来自动以当前日期命名log文件 并存放于Stata15\do 文件夹下。

cap cd `c(sysdir_stata)'do
if _rc{
	mkdir `c(sysdir _stata)'do
}
local fn = subinstr("`c(current_time)'",":","",2)
local fn1 = subinstr("`c(current_date)'"," ","",3)
log using `c(sysdir_stata)'do\s`fnl'`fn'.log, text replace
cmdlog using `c(sysdir_stata)'do\c`fn1'`fn'.log, replace

* cd `E':\Stata15\ado\personal		// Stata启动后自动进入该目录
cd `c(sysdir_personal)'

Stata命令语法格式

一般语法格式

(1)sum

* 帮助文档
help summ

stata软件和python stata软件优缺点_stata软件和python_13


从帮助文件中可以知道,summ命令可以简写为“su”。

方括号中为可选项。

sum wage				// 计算变量的基本统计量
sum wage if race == 1	// 利用if限制样本范围
sum wage in 1/10		// 限定前十个观察值,in很少用
sum wage, detail 		// 附加选项,用于提高整个命令的灵活性(detail表示显示详细信息)

* Stata命令还支持前缀写法
bysort race: sum wage hours age 		// 按race种族分类计算变量的基本统计量
bysort marr collgrad: sum wage hours	// 按marr 和 collgrad来计算变量的基本统计量

(2)调入数据

sysuse nlsw88, clear

sysuse 和 webuse都是 use 命令的拓展命令,sysuse 用于从Stata的内置数据库中调取数据,webuse用于从网络上调取数据。

(3)语法文件

help language

stata软件和python stata软件优缺点_变量名_14


bysort属于prefix(前缀)

在Stata中,选项option通过逗号分隔。无论命令多长,只能有一个逗号裸露在外。

* 实例1
sysuse nlsw88, clear
gen lnwage = ln(wage)		// gen用于生成新变量
gen yes_white = (race==1)
tabstat lnwage hours married age, by(yes_white) s(mean) f(%3.2f)		// 计算基本统计量
* 实例2
* 绘制标准普尔500指数,某年份的收盘价价格走势
sysuse sp500, clear
twoway line close date, title("收盘价", place(left))

实例2中第二行的第一个逗号前为指定的变量和绘图的类型,后面一个逗号包含在指定选title内,并未裸露在外。

变量

(1)引用变量

* 帮助文档
help varlist

Stata中支持三种通配符:*,?,-

* 实例:对nlsw88数据中的age、race、married、never married、grade几个变量进行统计
sysuse nlsw88, clear
sum age race married never married grade		// 方法1:最复杂
sum age-grade			// 如果统计的是在数据中顺序存放的变量,通过观察Stata界面右上角的变量列表,可以得到所需的首尾两变量名称。若中间不连续,则可以分成连续的段进行处理
sum s*					// 统计以s为首的所有变量
sum *arr*				// 统计包含arr字符的变量
sum ?a?e				// ?指代一个字符,即统计固定位置字符的变量

(2)因子变量:变量的前缀
因子变量的出现使书写效率提高

* 帮助文档
help fvvarlist

stata软件和python stata软件优缺点_数据_15


图为执行“tab race”指令后结果

* 实例:研究工资wage的决定因素,研究tenure、hours、i.race、i.industry对其影响
sysuse hlsw88, clear
tab race			// 输出种族类别的表
reg wage tenure hours i.race i.industry		// i.race和i.industry分别为种族和行业虚拟变量
reg wage tenure hours age c.age#c.age		// “c.”表示后接连续变量。
reg wage tenure hours c.age##c.age			// 为上一行命令的简写,等价于上一行命令。
reg wage tneture hours i.marr i.marr#c.hours

stata软件和python stata软件优缺点_变量名_16


图为执行“reg wage tenure hours i.race i.industry”指令后结果。结果直接呈现了连续变量,类别变量race本身有三类,但是为了共线性问题将频数最高项,即白人作为基准组(对照组)。其中race下的2实际对应一个虚拟变量,若为黑人则取1,否则取0,3同理。行业虚拟变量同理种族虚拟变量。

stata软件和python stata软件优缺点_Stata_17


图为执行“reg wage tenure hours age c.age#c.age”指令后结果。目的是查看age的平方项的影响,即age岁被解释变量wage是否二次的影响。不用生成平方项,只需使用c.age#c.age来指代一个平方项。可以看到平方项的结果为负,所以还是更适合做线性估计。

(3)时间序列变量

* 帮助文件
help tsvarlist
* 实例:根据时间变量进行排序
sysuse sp500, clear
tsset date			// ts = time series
gen t = _n
tsset t
gen lnP = ln(close)			// lnP为收盘价的自然对数
gen return = D.lnP			// “D.”表示后面变量的一阶差分,D.lnP即收益率			
gen Lreturn = L.return		// “L.”表示后面变量的一阶滞后,L.return即前一天的收益率
gen L2return = L2.return 	// “L2.”表示两阶滞后,L2.return即前两天的收益率

reg return L.return L2.return
reg return L(1/3).return F(1/2).return		// 精简写法:在回归时,不产生新变量,直接采用这种方式隐式迭代得到一二三阶滞后项,“F.”表示前推项,即向前推一期和推两期的前推项。

帮助文件和外部命令

help contents	// 进入帮助文档

stata软件和python stata软件优缺点_Stata_18

help help	// help 命令的帮助文件
help guide	// basic Stata concepts(最基本的Stata命令)
help tabstat	一般化帮助文件

stata软件和python stata软件优缺点_Stata_19

点击“(View complete PDF manual entry)”可以查看帮助文件的pdf文件,pdf文件中列举了许多范例。

帮助文件右上角的下拉菜单 Dialog–>tabstat

stata软件和python stata软件优缺点_Stata_20


用于填写菜单命令(针对对数学命令不熟悉的情况,填写后stata自动生成对应的文字命令)

Also See是同现在输入的tabstat命令相关的命令,横向关联。

Jump To是具体目录,例如Description是该命令的整体介绍,Examples提供范例。

命令检索

用于查找不清楚命令名称的情况

help findit	// 网络搜索,查找外部命令和范例

使用findit命令后接命令的关键词()

* 实例
findit dynamic panel	// 查询动态面板相关命令

stata软件和python stata软件优缺点_变量名_21


其中“xt”开头为Stata的官方命令,“sj”开头的为Stata期刊中命令,其他为用户自己编写的外部命令。

【实现高效检索的建议】

stata软件和python stata软件优缺点_变量名_22

管理和使用外部命令

help net_num	// 查看外部命令来源

stata软件和python stata软件优缺点_数据_23


search —— 类似于findit

Stata Journal —— Stata期刊

STB —— Stata技术报告

help ssc	// ssc: Statistical Software Components

stata软件和python stata软件优缺点_Stata_24

(1)统计软件组件定期更新外部命令,通过以下命令来查看新加入的内容:

ssc whatsnew

下载安装ssc命令:

ssc install winsor, replace	// 安装winsor命令,replace用于删除之前安装的旧版本

(2)外部命令存放地址:
使用net命令

help net

stata软件和python stata软件优缺点_变量名_25


使用这两条命令指定下载的命令以及相关辅助数据、说明文档存放的位置。

(3)指定下载的外部命令存放地址:

net set ado "E:\Stata15\ado\personal\mypuls"

需要提前将指定目录的文件夹建好
(4)查看已安装的外部命令

ado	// 呈现本机上安装的所有外部命令
ado, find(winsor)	// 仅呈现包含特定关键词的外部命令

(5)其他管理外部命令的指令

help mypkg
mypkg	// 呈现本机上已安装的外部命令(将外部命令按字母顺序排列)
mypkg xt*	// 呈现xt开头的所有外部命令
which winsor2	// 列示命令的基本信息

(6)交流平台
Stata官方:常见问题解答FAQs
https://www.stata.com/support/faqs/ 包含基本问题的简洁说明

加入Stata用户邮件列表:
https://www.statalist.org/ 可以收到全球各种问题讨论邮件

中文:人大经济论坛【Stata专版】
https://bbs.pinggu.org/forum-67-1.html

变量名称

help gen	// gen:generate -- Create or change contents of variable
help egen	// egen -- Extensions to generate
help varname	// 多变量命名规则
help newvarlist	// 多个新变量

新变量命名规则

(1)由英文、数字或“_”组成,至多不超过32个。
(2)首字符必须为字母或“_” 。(尽量避免是使用_”作为变量名的首字符,因为Stata的许多内部变量都是以“_”开头的。)
(3)英文字母的大写和小写具有不同的含义。

变量重命名

help rename	// 单个重命名
help rename group	// 批量重命名
help renvars	// 批量添加前缀或后缀,常用于合并数据

实例:

sysuse auto, clear
rename make mk	// 将变量make重命名为mk
rename (price rep78) (Price REP78)	// 批量更改变量名称,第一个括号内为各原变量名称,第二个括号内为各原变量对应的新名称
rename mpg foreign trunk, upper	// upper批量将变量名称大写

renvars price mpg wei, prefix(d1_) des	// 将price mpg wei三个变量批量增加前缀“d1”	(实测Stata15中不能使用renvars命令,均使用rename命令,详情见文档rename group文档)

变量标签

对变量做进一步的说明。

help label

实例:

label var price "汽车价格($)"	// label var为变量增加标签,price 为变量名,引号内为文字说明
label var rep78 "维修次数"

数字-文字对应表

对于大型问卷调查,多数都是类别变量编码。使用数字对应文字来对数字含义进行说明。

* Step1: label define,定义标签内容
label define rep78 1 "很好" 2 "较好" 3 "中等" 4 "较差" 5 "很差"

* Step2: label value,将变量与标签内容关联起来
label value rep78 rep78	// 第一个rep78是变量名称,后一个rep78是标签的名称(为了简单起见,将变量名称和标签名称定义为相同的)

label list rep78	// 查看对应关系
des rep78	
br rep78	// 查验结果

stata软件和python stata软件优缺点_Stata_26

列示和查看变量

help des	// 变量概况
help ds	// 仅列示变量名称

实例:

sysuse nlsw88, clear
des
ds
ds, alpha	// 按字母顺序排列显示

查找变量

help lookfor	// 基本命令
help lookfor_all	// 外部命令
help findname	// 外部命令

实例:

use d_lookfor, clear
lookfor "现金流"
lookfor "报酬"

do 文档

(1)do文档实际上是Stata命令的集合,方便一次性执行多条Stata命令;
(2)do文档的使用让分析工作具有可重复性;
(3)在一篇文章的实证分析过程中,通常将数据的分析工作写在do文档中。

do文档的使用

(1)新建和打开do-file

doedit	// 新建do-file

输入命令后保存,在Do-file Editor中再次使用时点击菜单栏open选项打开。

doedit Test.do	// 打开一个已存在的名为Test.do的do文档,可指定完整路径

还可以在主菜单条上点击“New Do-file Editor”按钮,新建do-file。

stata软件和python stata软件优缺点_数据_27


(2)文字特征

点击Do-file Editor窗口中的 Edit–》Preferences 修改偏好设置。

stata软件和python stata软件优缺点_stata软件和python_28


(3)执行do文档

点击菜单栏的“Execute(do)”按钮

stata软件和python stata软件优缺点_数据_29


或者按“Ctrl+D”。

默认不选中命令语句时执行整个文件,选中语句后执行特定选择的指令。

合理规划do-file

(1)注释
注释有以下三种方式:

* 第一种注释方式
sum price weight	/* 第二种注释方式 */
gen x = 5	// 第三种注释方式

(2)断行
当一行语句过长时,采用断行的方式缩短语句。
断行有以下三种方式:

* 第一种断行方式:	///
sysuse auto, clear
twoway (scatter price weight) ///
	(lfit price weight), ///
	title("散点图和线性拟合图")

* 第二种断行方式:	/* */ (不常用)
twoway (scatter price weight)	/*
	*/ (lfit price weight),		/*
	*/ title("散点图和线性拟合图")

* 第三种断行方式: #delimit 命令(Stata默认出现回车即认为发生断行,所以使用delimit来改变发生断行的标记符号)
#delimit ;	// 设置断行的标记符号为“;”
sysuse auto, clear; des; sum;	// 为三条语句
twoway (scatter price weight)	
	(lfit price weight),
	title("散点图和线性拟合图")
#delimit cr	// 退回为回车断行的标记方式

【注意:注释和断行的反斜杠前至少要有一个空格】

Stata中的函数功能

help functions

stata软件和python stata软件优缺点_数据_30


主要涉及以上的几大类函数:

math functions——数学函数

density functions——密度函数,用于描述随机变量的分布形态

random-number functions——产生随机数的函数

string functions——字符函数

programming functions——编程函数

datetime_functions——有关时间函数,用于时间序列

time-series functions——有关时间函数,用于时间序列

matrix functions——矩阵函数

help egen	// egen用于使用函数来产生新变量

Math functions

help math functions
sysuse nlsw88.dta, clear

gen ln_wage = ln(wage)		// 以e为底数
gen log_wage = log10(wage)	// 以10为底数

gen int_tenure = int(tenure)		// 取整
gen round_tenure = round(tenure)	// 四舍五入
list *tenure in 1/20

des industry	// 对于类别变量,处理分为直接基于类别变量分析或是定义虚拟变量(即转化为0,1)
gen dummy = inlist(industry, 7,8,11)	// 定义虚拟变量,这里是定义下图中的标号为7,8,11的三个行业属于同一类(取1),其他的为另一类(取0)
* inlist括号内第一项为类别变量的名称,逗号之后列举要展示的数字,后面可以定义文字信息
br industry dummy, nolabel	// 查看定义虚拟变量后的结果

stata软件和python stata软件优缺点_变量名_31


以下为定义虚拟变量后的结果。

stata软件和python stata软件优缺点_Stata_32

String functions

help string functions

实例:股利分配数据(第一列为发布时间,第二列为数额),需要将时间变量切割为年月日。

实现思路:使用tostring命令将数字转化为文字,再进行切割。

stata软件和python stata软件优缺点_数据_33

use tostring2.dta, clear
tostring date_pub,gen(date1)	// 数字--》文字

stata软件和python stata软件优缺点_stata软件和python_34

gen year = substr(date1, 1, 4)	// 使用substr函数进行切割,取出前四位。从第一个字符开始,取四个字符
gen month = substr(date1, 5, 2)	// 从第五个字符开始,取两个字符
gen day = substr(date1, 7, 2)

下图为切割结果:

stata软件和python stata软件优缺点_变量名_35

destring year month day, replace 	// 再将 文字--》数字

实例:银企关系数据中银行名称的提取。数据中包含三个变量(id,year,objnm),但是由于objnm变量值过长,导致无法显示。

stata软件和python stata软件优缺点_数据_36

ues bankname.dta, clear
compress	// 精简存储格式,compress attempts to reduce the amount of memory used by your data.
keep in 1/15	// keep: drop eliminates variables or observations from the data in memory.

使用compress进行精简,这时银行名称得以显示。

stata软件和python stata软件优缺点_数据_37


compress()和kcompress()的区别

需要将银行名称中的总行名称提取出来。

实现思路:使用查找替换进行处理

gen bank = objnm
* 搜索关键字进行替换
replace bank="中国农业银行" if strmatch(bank, "*农业银行*")
replace bank="招商银行" if strmatch(bank, "*招商*")
replace bank="中国银行" if strmatch(bank, "*中国银行*")
replace bank="中国工商银行" if strmatch(bank, "*工商*")
replace bank="兴业银行" if strmatch(bank, "*兴业*")
replace bank="光大银行" if strmatch(bank, "*光大*")
replace bank="交通银行" if strmatch(bank, "*交通*")
replace bank="北京银行" if strmatch(bank, "*北京*")
browse

stata软件和python stata软件优缺点_Stata_38


【其他常用字符函数】

help substr()		// 截取
help strmatch()		// 查找替换
help strpos()		// 字符出现的位置
help subinstr()		// 替换字符
help subinword()	// 替换单词

Random-number functions

常用于蒙特卡罗模拟

help random_number_functions

实例:

clear
set obs 10000	// 设定10000个观察值

gen x_u = runiform()	// 服从U~(0,1)均匀分布的随机数
histogram x_u			// 绘图

stata软件和python stata软件优缺点_stata软件和python_39

gen x_n = rnormal()	// 服从标准正态分布的随机数,r代表随机数
histogram x_n

stata软件和python stata软件优缺点_stata软件和python_40

gen x_p = rpoisson(5)	// 服从自由度为5的泊松分布
histogram x_p

stata软件和python stata软件优缺点_stata软件和python_41

* 蒙特卡罗模拟,相关应用
help simulate
help bootstrap