引言
做实证研究的朋友,应该都有这个体会:数据整理和分析,占了一篇论文大半的时间。
SPSS太基础,SAS太复杂,R语言学习曲线又太陡。相比之下,Stata是一个很好的选择。它功能强大,许多方面甚至超过SPSS和SAS,但同时也因为需要写命令,吓跑了不少新手。
Stata真的那么难学吗?其实不然。
刚接触时确实会觉得命令记不住、报错看不懂。但只要掌握了最常用的那批命令,你会发现Stata是一个既好学又好用的工具。
今天这篇文章,整理了27个Stata常用命令,从数据导入到回归分析,每个命令都配有实际代码和简要说明。建议先收藏,用的时候直接翻出来复制粘贴。
扫码免费获取Stata安装包
没有隐藏任务,不需要转发朋友圈
添加后直接发送

1
数据导入与预处理
注:红色字体使用时可根据实际情况进行修改
【1】直接导入csv格式数据
insheet using name.csv, clear
【2】修改变量长度
format var %20.2g
【3】删除重复值
sort var1 var2
duplicatesdrop var1 var2, force
【4】数据合并
use data1, clear
merge m:m var1var2 using data2
drop if _merge==2
drop if _merge==1
drop _merge
【5】生成一期滞后项
tsset stkcd accper
gen newvarname=L.varname
【6】将文字转化为数字变量
genBigN=0
replaceBigN=1 if strmatch(dadtunit,"普华永道*")
【7】删除有缺失值的记录
egen mis=rowmiss(_all)
drop if mis
drop mis
【8】行业划分
clonevarsic2=ind
order stkcd accper sic2
replace sic2=substr(sic2,1,1) if substr(sic2,1,1)!=”C”
replace sic2=substr(sic2,1,2) if substr(sic2,1,1)==”C”
tabulate sic2 accper
【9】日期只保留年份
drop if substr( reptdt ,6,2)!="12"
replace reptdt=substr(reptdt,1,4)
gen accper=real(reptdt)
【10】数据分列
split date ,parse(-) destring ignor("-")
【11】求两个日期之间的间隔天数
g td=date(trading_date,"YMD")
g ed=date(eventdate,"YMD")
form td ed %td
g d=ed-td
【12】生成行业、年份哑变量
tab year, gen(year)
tab industry, gen(industry)
【13】对数据进行Winsorize处理
findit winsor2
winsor2 varname, replace cut(1 99)
2
描述统计与检验
【14】描述性统计
tabstat var1var2, stat(n min mean median p25 p75 max sd), if groupvar==0 or 1
logout, save(name) word replace: tabstat var, stat(n min mean p50 max sd) col(stat)f(%9.2g)
【15】两变量列联表
tabulate var1 var2, row chi2 taub gamma
【16】两样本间的均值T检验
ttest var, by(groupvar)
【17】两样本中位数Z检验
ranksum var, by(groupvar)
【18】Pearson/Spearman系数
spearmanx*n matax=st_data(.,"x*")c=correlation(x)n=rows(c)b=strofreal(lowertriangle(c)+uppertriangle(st_matrix("r(Rho)")),"%9.3f")p=st_matrix("r(P)")for (i=2; i<=n; i++) {for (j=1; j<=i-1; j++) {p[i,j]=2*ttail(rows(x)-2,abs(c[i,j]/sqrt((1-c[i,j]^2)/(rows(x)-2))))b[i,j]=b[i,j]+(p[i,j]<0.01?"***":(p[i,j]<0.05?"**":(p[i,j]<0.1?"*":"")))b[j,i]=b[j,i]+(p[j,i]<0.01?"***":(p[j,i]<0.05?"**":(p[j,i]<0.1?"*":"")))}}c=editvalue(b, "2.000", "1")cend
直接导出结果
logout, save(pw) word replace:pwcorr_avars, star1(0.01) star5(0.05) star10(0.1)
3
分组与回归分析
【19】按年度按中位数分组
方法一
bysort year: egen g=xtile(var), n(2)
方法二
bys accper: cumul icindex, g(g) eq
levelsof accper, local(id)
display "`r(levels)'"
local cut1 = 1/2
foreach x of local id {
recode g (min/`cut1'=0)(`cut1'/max=1) if accper==`x'
}
分三组
bys accper:cumul icindex, g(g) eq
levelsof accper, local(id)
display "`r(levels)'"
local cut1 = 1/3
local cut2 = 2/3
foreach x of local id {
recode g (min/`cut1'=1)(`cut1'/`cut2'=2)(`cut2'/max=3)if accper==`x'
}
【20】输出回归结果
安装
ssc install estout, replace
单个回归
reg
esttab using name.rtf, compress nogap r2 ar2 star(* 0.1 ** 0.05 *** 0.01)
多个回归一起
reg
est store m1
reg
est store m2
esttab m1 m2 using name.rtf, compress nogap r2 ar2 star(* 0.1 ** 0.05 *** 0.01)
连续运行tobit模型结果导出:
esttab m1 m2, b(%9.4f) t scalars(N ll Fchi2 type), using name.rtf, compress nogap
连续运行OLS模型结果导出:
esttab m1 m2, b(%9.4f) tscalars(N r2 F p), using name.rtf, compress nogap
【21】异方差检验及处理
检验:怀特检验
ssc install whitetst
reg
estat imtest, white
处理:“OLS+稳健标准差”
reg y x1 x2 x3, robust
【22】DW检验(序列相关性一阶)
gen id=_n
tsset idestat dwatson
【23】多重共线性
reg y x1 x2 x3vif
【24】是否遗漏高次项
例如,检验y对x的线性回归有没有遗漏高次项
reg y x
estat ovtest
或者estat ovtest, rhs
【25】逐步回归
stepwise, pe(0.1): reg y x
【26】Maddala(1983)两阶段处理效应模型
treatreg yx1-xn, tr(z=w1-wm)two
【27】Justified Jones Model
statsby _b, by(ind accper)saving(*.dta,replace):reg yx, noconstant
merge m:m indaccper using *.dta
gen yhat=y-_b*x
结论
Stata的学习门槛没有想象中那么高。这27个命令涵盖了从数据导入、清洗、合并,到描述统计、假设检验,再到回归分析和结果输出的完整流程。掌握这些,大部分实证研究的数据处理工作都能应对。
建议把这篇文章收藏起来,下次处理数据时直接对照使用。熟练之后,你会发现Stata不仅不难,反而非常顺手。
另外,如果你在论文选题、学术写作、期刊筛选、格式校对、发表检索等环节遇到困难,我们也有全流程一对一论文辅导服务。适配本硕博、职称评审、毕业论文、科研提升等场景,包含选题、开题、文献综述、研究方法、数据分析、论文写作与修改等全模块支持。资深专家全程跟进,签署保密协议,不做论文代写,严格遵守学术道德。
扫码添加新新学长

获取更多论文知识及科研干货
获取你的专属发表方案

夜雨聆风