【stata系列】——入门必备
01 导入
将excel导入stata通常有两种方式:一是import;二是insheet。两者有不同的适用范围和格式要求。
import excel_name using 'xxxx', clear
// 用import直接将excel导入stata较为方便快捷,但是弊端在于超过40m的excel无法导入,stata12版本可以用import导入,stata12以上版本未测可行,建议stata12以上版本采用insheet导入。
// clear是为了清除页面已有的dta文件,也可以先在交互行里输入clear语句,再输入import语句。
insheet using 'xxxx', clear
// 用insheet导入stata不受大小40m的限制,但是对格式有要求,必须先将excel另存为csv格式,再用insheet导入,建议stata12以上版本用户采用这种方法。
// “xxxx”指的是文件存储地址,windows用户可以通过文件-显示简介查看路径名,mac用户可以打开terminal终端,直接将文件拖入终端窗口,获取路径名。
// 如果导入失败,请检查是否用错英文格式的标点符号。
// 导入成功后,在退出前记得及时save为dta文件,放入指定文件夹中,方便管理。
在stata里打开dta文件就比excel导入更为简单,也有两种方式:直接点击open选择文件,或者写一条use的代码打开指定文件。
如图,直接点击stata界面左上角的open选项,选择要打开的dta文件:
use 'xxxx', clear
// 通过写use的语句也可以打开指定dta文件,写语句的形式更适用于do-file文件的记录。
// do-file就是一个可以替代交互式代码的记录文件,交互式代码一次输入一行命令,do-file文件可以同时执行n条指定命令,方便使用和检查,保存好do-file后会显示.do后缀名。(就跟码农敲代码一样,新手们可以码起来啦,告别傻瓜式交互窗口会是实证小白的第一次飞跃!)
02 初始处理
在导入excel或csv文件或打开dta文件后,此时需要对原有的变量进行初始处理,如:重命名rename、设置标签label、删除drop、保留keep、保存save/saveold、替换replace、变量排序order、大小排序sort、变量类型转换destring、encode等。
rename x1 x2
// 将x1的名称换为x2。
label variable x1 'xxxx'
// 将变量x1的标签设置为xxxx。
drop x1 x2
// 删除x1和x2,中间空格,不加标点。
duplicates drop x1 x2, force
// 删除x1和x2两个变量一一对应的重复值,force是强制执行。
keep x1 x2
// 保留x1和x2,其他变量删除。
// drop和keep都可以与if语句联合使用。
replace x1=x2
// 将x2的值赋给x1,也可以是一个具体赋值。
order y x1 x2
// 变量按照y x1 x2的顺序排序。
sort x1 x2
// 将x1和x2按大小排序。
// 建议在命名变量时尽量采用英文命名方式,stata12及以下版本不支持中文变量名,stata13及以上版本支持中文变量名。即便您使用了最新版本的stata,依然存在他人用低版本stata打开时出错的可能性,为了避免出错,建议养成英文变量命名的习惯。
save 'xxxx'
// 保存为xxxx.dta文件,不覆盖原文件。
save '', replace
// 保存为xxxx.dta文件,覆盖原文件。
saveold xxxx
// 默认将dta文件存为stata13版本
saveold xxxx, version(12)
saveold xxxx, version(11)
// 将dta存为stata12或stata11版本
destring x1, replace
// 字符型转为数值型,覆盖原变量。
destring x1, gen(x1_new)
// 字符型转为数值型,生成新变量x1_new。
encode x1, gen (x1_new)
// 字符型转为数值型(按字符排序),生成新变量x1_new,常用于对industry字符型变量的转换。
03 变量管理及数据合并
在初始处理后,可能需要数据合并,并设置新的变量,以便完成后续的实证分析部分。常用到生成新变量gen、生成中位数或均值egen、变量分组xtile、滞后变量lag、横向合并merge、纵向合并append。
gen x=0
replace x=1 if y==0|y==1
// 令新生成的x变量赋值为0,若y=1或y=0就令x的值为1。
// gen全称是generate,简称gen即可。
// 在stata中y=1的写法是y==1,同时y!=1表示y不等于1,如果stata显示出错,请检查双等号是否输入错误。
egen x_mean=mean(x)
// 生成变量x的均值x_mean。
egen x_median=median(x)
// 生成变量x的中位数x_median。
by type: egen x_mean=mean(x)
// 按照type分类生成变量x的均值x_mean。
// egen和gen的不同在于,gen常用于生成新的变量,生成均值或中位数只能用egen,二者不可随意替代。
// gen和egen两者不同于设置标量sca和global,sca适用于局部标量,global适用于全局标量,标量可以“整体打包”变量,在变量复杂时更不易出错。(新手可以直接忽略,会用gen和egen即可)
xtile x_group=x, nquantile(a)
// 将x分成a组,定义为x_group,x_group的取值为1到a,若a=3,那么取值为1、2、3,分别代表最低组、中位组和最高组。
gen x_lag1=x[_n-1]
// 生成x滞后一期的变量,若需生成滞后两期,只需要将[_n-1]换成[_n-1]即可,滞后多期同理。
merge 1:1 x1 x2 using 'xxxx'
// 横向合并:按照x1和x2两个变量在子表xxxx中1:1匹配,若主表和子表是多对一,将1:1换成m:1,若主表和子表是一对多,将1:1换成1:m即可,“xxxx”表示子表路径名。
append using 'xxxx'
// 纵向合并:前提是保证主表和子表的变量个数和名称全部一致,即可直接匹配,“xxxx”表示子表路径名。
// merge横向合并和append纵向合并的优点在于:可以将单表汇总,简单易行;缺点在于:一次性只能匹配一张表,若有多表需要匹配,则需合并多次。csmar提供的跨表数据可以解决数据匹配和合并问题,除此之外,多表横向合并可以通过mergemany实现,后续的【stata系列】合并篇会分享多表合并的实现方法。
04 描述性统计及相关性分析
描述性统计和相关性分析是实证分析的第一步,通常要用到list、tab、describe、sum等命令。进一步的,关于结果的输出会在后续的【stata系列】结果输出篇统一呈现。
list in a/b
// 看a-b个观测值,list表示列示观测值的所有变量信息。
tab y x
// 列联表显示x和y的二维分布,即统计个数。
descibe x
// 描述变量x的数据格式信息,descibe可以简写成d,即命令等同于'd x'。
sum y x
// 对y和x进行描述性统计,未加detail可以显示出最小值,最大值,标准差,个数,均值,中位数。
sum y x, detail
// 对y和x进行描述性统计,加上detail除以上各指标外,还会列示出详细的分位数情况。
by year: sum y x
// 根据年度来分别对y和x进行描述性统计。by也可写成bys,是bysort的简称,“按……分类”的意思,同理,也可加上detail。
pwcorr x1 x2 x3, sig obs
// pearson相关性分析
spearman x1 x2 x3, stas(rho p)
// spearman相关性分析
(关于相关性分析和描述性结果的其他输出方式,会在后续内容中作单独整理,并分享更为简便实用的输出方式,如您有更好的见解,欢迎不吝赐教。)
05 单变量分析
对单变量的均值、中位数和虚拟变量之间的差异分析,常用ttest、ranksum、prtest。
ttest x, by(r)
// 测试r=0和r=1的两组x的均值是否显著存在差异,单变量均值差异分析用ttest。
ttest y=0
// 测试y的均值是否显著异于0。
ranksum x, by(r)
// 测试r=0和r=1的两组x的中位数是否显著存在差异,单变量中位数差异分析用ranksum,一般采用秩和检验。
prtest y, by(r)
// 测试r=0和r=1的y是否显著不同。
(差异分析常用在difference-in-difference双重差分模型里。需要注意的是,单变量分析和组间系数差异分析不同,组间系数差异分析会在后续的【stata系列】中陆续更新。)
06 普通OLS回归分析
实证分析最重要的一环就是回归分析部分。常涉及到的模型有OLS模型、FEM固定效应模型和REM随机效应模型。同时,要关注异方差、自相关的问题。(后续会单独对异方差和自相关的问题进行整理,此处不赘述其成因和检验方法,只介绍解决办法,感兴趣的读者可移步至后续更新的【计量小知识】系列查阅。)
reg y x1 x2 x3 (if post==0)
// 普通OLS回归,可加if语句。
reg y x1 x2 x3, robust
// 稳健标准误的普通OLS回归,robust用以解决异方差问题,不改变系数大小,改变的是变量的标准误。
reg y x1 x2 x3, robust cluster(id)
// 对id进行聚类的稳健标准误后的普通OLS回归,cluster(id)表示对id进行聚类标准误处理,允许id组内自相关,但是不同id之间无组间自相关。
// 不管是否存在异方差和多重共线性问题,使用robust和cluster会使结果更加稳健,否则可能会低估标准误,导致结果过分显著。
以上内容由教学课件和个人经验简要整理而成,不便直接分享原始资料。为补充stata常用命令,可查阅以下参考链接:
1-stata使用频率最高的15个命令:
https://www.sohu.com/a/282111637_659080
2-常用的27个stata命令:
http://www.360doc.com/content/17/0501/09/39103730_649991233.shtml