第一天学习Stata软件做数据分析
利用系统自带的数据熟悉常用的命令
1、导入数据
sysuse auto.dta
打开第一个源文件water1.dta,将它按year排序,然后再另存为文件(再以覆盖方式保存)
use bloomberg-1.dta, replace
sort year
save bloomberg-2.dta, replace
1.1查看数据(字段类型为数值,字符串不行)的数量、平均数、标准差、最小值、最大值
summarize [varlist][if][in][,options] //字段描述
summarize price //描述价格这个字段
sum price //简写的命令也可以被识别price是字段
1.2描述变量(字段)类型、格式、标签
describe [varlist] // 字段描述
describe, short
count if price > 5000
isid varlist //检查是否为识别标签,类似于数据库的主键
isid price //该字段是唯一值,不会报错
isid mpg //不是唯一值,会报错
unique var //需要安装,用命令 ssc install unique
1.3tabstat
sysuse "nlsw88.dta", clear
\\\一维表形式如下:
tabstat wage hours age union race, stat(N mean sd min max) col(stat)
variable | N mean sd min max
-------------+--------------------------------------------------
wage | 2246 7.766949 5.755523 1.004952 40.74659
hours | 2242 37.21811 10.50914 1 80
age | 2246 39.15316 3.060002 34 46
union | 1878 .2454739 .4304825 0 1
race | 2246 1.282725 .4754413 1 3
----------------------------------------------------------------
\\\加入分组变量,汇报二维表形式:
tabstat wage hours age union race, by(married) stat(N mean sd min max) nototal long col(stat)
married variable | N mean sd min max
---------------------+--------------------------------------------------
single wage | 804 8.080765 6.336071 1.151368 40.19808
hours | 801 39.23845 9.099001 2 80
age | 804 39.21891 3.049911 34 46
union | 656 .2759146 .4473151 0 1
race | 804 1.404229 .5109335 1 3
---------------------+--------------------------------------------------
married wage | 1442 7.591978 5.399229 1.004952 40.74659
hours | 1441 36.09507 11.06107 1 80
age | 1442 39.1165 3.066058 34 45
union | 1222 .2291326 .4204468 0 1
race | 1442 1.214979 .4402987 1 3
------------------------------------------------------------------------
2、数据字典
codebook [varlist][if][in][,options] //数据字典
codebook price mpg
codebook pric if price > 5000
codebook price in 10/20
帮助信息,新窗口显示帮助信息
help codebook
2.1、新增字段generate命令sum() 函数
clear
input x1 x2
1 2
2 4
3 6
4 8
end
gen sum_x1 = sum(x1)
gen sum_x2 = sum(x2)
list, clean noobs
从结果中可以看出,gen 提供的 sum() 函数是累计求和。
2.2 egen命令的sum() 和rsum()函数
egen sum_x1=sum(x1)
egen sum_x2=sum(x2)
egen rsum_x = rsum(x1 x2)
egen rtotal_x = rowtotal(x1 x2)
list , clean noobs
从结果中可以看出,egen 提供的 sum() 函数计算该变量的总和,rsum() 计算行数值的相加和,rowtotal() 函数与 rsum() 功能一致。需要注意的是,rowtotal() 不能简写为 rtotal()。
此外,egen 还提供了丰富的针对行操作的函数,如 rowfirst()、rowlast()、rowmax()、rowmean()、rowmedian()、rowmin()、rowmiss()、rownonmiss()、rowpctile()、rowsd() 等,详细介绍可以通过 help egen 查看。
2.3egen和bys结合 分组计算和【三个变量,按两个变量分组,第三个变量求和】
bys kind year:egen type_TotalAmount = sum(type_sumAmount)
通过kind类别 和year年份将数据分组,然后新增一列type_TotalAmount 计算出type_sumAmount的总和
table kind year, c(n type_sumAmount mean type_sumAmount mean type_sumAmount )
得到如上图的列表,但是想导出,尝试了很多方法都没有得到一个excel文件,导出的数据样式会变,即便导出word、text、log等都不理想,
提示一个好方法:在展示框选中所有数据,然后右键copy table 可以把数据的格式复制出来
2.4collapse命令,会覆盖原有数据,慎用,
collapse (sum)type_sumAmount ,by(year kind)
sort kind year
这个没有用table做出来的直观,后续遇到好的方法还会继续更新
3、画图
3.1.histogram (直方图)
histogram varname [if][in][weight][,[continuous_opts][discrete_opts]options]
//简写为 hist 最常用的三种形式
hist varname
hist varname,freq
density 密度 den
fraction 分数/小数 frac
frequency 频率 freq
percent 百分比 per
hist vaname, by(varname2)
3.2.graph box/ graph hbox horizontal 水平的
graph box vars [if][in][weight][,options]
graph hbox vars [if][in][weight][,options]
graph hbox price mpg length
graph box price mpg length
3.3.小提琴图,选装 ssc install vioplot
vioplot price
vioplot price, over(foreign)
graph query schemes
stata 默认主题是s2color建议选用s1mono
set scheme s1mono //Stata重启之前设置为s1mono
set scheme s1mono, perm //永久设置为s1mono (灰度图像)
3.4.散点图
[twoway] scatter varlist [if][in][weight][,options]
最基础的形式: twoway scatter y x
进阶形式; twoway scatter y1 y2 y3 ……x
twoway scatter weight length price
twoway scatter mpg weight, msymbol() mcolor() msize()
msymbol() 改变形状 help symbolstyle
mcolor() 改变颜色 help colorstyle
msize() 改变大小 help markersizestyle
twoway scatter mpg weight price, msymbol(D) mcolor(red) msize(medium)
twoway scatter mpg length weight price, mcolor(black blue red) msize(medium)
twoway scatter mpg length weight price, by(foreign) mcolor(black blue red) msize(medium)
4.Twoway命令入门
sysuse uslifeexp, clear
help twoway
示例如下:
4.1带散点的折线图
twoway connected le year //带散点的折线图
twoway connected le_male le_female year
4.2垂直线图
twoway dropline le year //垂直线图
twoway dropline le_male le_female year
4.3脉冲图,y2会覆盖在y1上,
twoway spike le year //脉冲图
twoway spike le le_male le_female year
twoway spike le le_female le_male year
4.4 面积图 y2会覆盖在y1上,注意下图区别
twoway area le_male le_female year // y1会被覆盖,看不到
twoway area le_female le_male year
4.5 lowess图,相对于散点图平滑曲线
twoway lowess le year //平滑曲线
lowess le year // 平滑曲线,叠加散点
4.6graph twoway lfit y x (y对x回归的回归直线)
5、统计描述指标
ci mean : 连续变量mean的置信区间
proportion(可简写为prop):分类变量mean的置信区间
pwcoor:变量的配对相关性
graph matrix:相关性矩阵
示例
实力使用数据导入
sysuse auto, clear
5.1ci mean : 连续变量mean的置信区间
ci 是confidence intervals的缩写,
ci means [varlist][if][in][weight][,options]
cii means #obs #mean #sd [,level(#)]
默认95%置信区间
ci mean mpg price, level(95)
cii mean 166 19509 4379, level(95)
5.2分类变量的置信区间:
choice 1
ci proportions [varlist][if][weight][,prop_options options]
ci prop foreign
缺点: ci prop 只能 用于二分类变量(binary)
ci rep78
choice 2
proportion 分类变量的置信区间
proportion varlist [if][in][weight][,options]
prop
默认95%置信区间
prop foreign
prop foreign rep78, miss //不忽略缺省值
6、pwcorr查看变量的相关性
pwcorr [varlist][if][in][weight][,pwcorr_options]
pwcorr price headroom mpg displacement //考虑price、headroom、mpg、displacement这四个变量的相关性
如果要展示P值,需要在后面加“, sig”
pwcorr price headroom mpg displacement, sig
pwcorr price headroom mpg displacement, star(0.05)
graph matrix绘制相关性矩阵
//geraph matrix varlist [if][in][weight][,options]
graph matrix price headroom mpg displacement
graph matrix price headroom mpg displacement, half
学习参考:
https://www.zhihu.com/question/35871900
https://zhuanlan.zhihu.com/p/54759702
常用命令
- 命令【1】:导入数据一般做实证分析使用的是excel中的数据,其后缀名为.xls,需要将其修改为.csv
insheet using name.csv, clear - 命令【2】:删除重复变量
sort var1 var2
duplicatesdrop var1 var2, force - 命令【3】:合并数据(merge 合并)
use data1, clear
merge m:m var1 var2 using data2
drop if _merge==2
drop if _merge==1
drop _merge - 命令【4】:描述性统计分析
tabstat var1var2, stat(n min mean median p25 p75 max sd), if groupvar==0 or 1
输出到word中:
logout, save(name) word replace: tabstat var, stat(n min mean p50 max sd) col(stat)f(%9.2g) - 命令【5】:结果输出
安装命令包
ssc install estout, replace
单个回归
reg y x
esttab using name.rtf, compress nogap r2 ar2 star(* 0.1 ** 0.05 *** 0.01)
多个回归一起
reg y x1
est store m1
reg y x2
est store m2
esttab m1 m2 using name.rtf, compress nogap r2 ar2 star(* 0.1 ** 0.05 *** 0.01) - 【命令6】生成滞后、差分数据
tsset code year
gen newvarname=l.varname
gen newvarname=d.varname - 【命令7】多重共线检验之方差膨胀因子
reg y x1 x2 x3
vif
【命令8】多重共线修正之逐步回归
stepwise, pe(0.1): reg y x - 【命令9】检验是否遗漏高次项
reg y xestat ovtest
或者
estat ovtest, rhs
【命令10】 样本检验两样本均值T检验
ttest var, by(groupvar)
两样本中位数Z检验
ranksum var, by(groupvar) - 【命令11】 生成虚拟变量
tab year, gen(year)
tab industry, gen(industry) - 【命令12】 数据缩尾处理
findit winsor2
之后安装
winsor2 varname, replace cut(1 99) - 【命令13】异方差检验怀特检验
ssc install whitetst
reg y x1 x2
estat imtest, white
处理:“OLS+稳健标准差”
reg y x1 x2 x3, robust - 【命令14】 DW检验
gen id=_n
tsset id
estat dwatson - 【命令15】计算两个日期之间的间隔天数
gen td=date(trading_date,'YMD')
gen ed=date(eventdate,'YMD')
form td ed %td
gen d=ed-td