Sata学习
Stata是一套提供其使用者进行数据分析、数据管理以及绘制专业图表的完整及整合性统计软件,stata软件也是目前学者进行实证分析的主流工具。下面就来学习以下吧!
一、do文档
写代码离不开do文档的创建,下面介绍do文档的一些注释、分行等符号命令,利用这些符号,可提高do文档的可读性:
1、注释方式
2.断行
3.数据导入与调用
save mydata,replace //保存数据
use mydata,clear //调用数据
代码中mydata中修改为需要保存/调用数据的地址。
4.变量操作(命令形式)
label var price Price //将price的标签修改为Price
rename 旧变量名 新变量名 //单个变量重命名用rename
//批量修改变量名称renvars
renvars [varlist] \ newvarlist
list tc q //查看tc q数据
list tc q in 1/5 //查看tc q数据,限制查看的行数
list tc q if q>=1000 //用if来限制条件
drop if q>=1000 //drop删除满足条件的数据
drop ln* //删除以ln开头的变量
keep if q>1000 //只保留满足条件的数据
sort tc //对变量tc升序处理
gsort -tc //对变量tc降序排序
summarize q,detail //查看q的统计特征,简写su,detail查看更为详细的信息
display 1+log(2)+3 //dispaly 数学表达式,返回计算的结果
*注意ta、d、su返回结果的区别
tabulate q //显示变量q的经验累积分布
describe //描述数据,也可以简写d
d
bysort large:sum q //查看large种类关于q变量的描述
summarize q,detail //查看q的统计特征,简写su,detail查看更为详细的信息
correlate tc q pl //返回tc q pl变量间的相关系数
5.基本绘图
histogram q,width(1000) frequency //画变量q的直方图,假定组宽为1000
kdensity q //绘制变量q的核密度图
scatter tc q //绘制tc与q的散点图
//在散点图上标注观测值
gen n=_n //先定义一个新变量
scatter tc q,mlabel(n) mlabpos(6) //以变量n为mark label的标签
//在散点图上绘制回归直线
twoway (scatter tc q)(lfit tc q) //lfit为线性拟合,qfit为二次拟合
//将两图合并
graph combine scatter1.gph scatter2.gph
6.变量生成
- 新变量的生成
gen lntc=log(tc) //生成lntc变量
gen large=(q>2000) //能生成q>2000为1,否则为0的虚拟变量
//也可以写成如下代码
gen large=1 if q>2000 //这里q>2000为1,否则为.,所以后面需要替换
replace large=0 if large==.
- 滞后项、前推项、差分
tsset date //声明数据为时间序列
gen open_lag = L.open //滞后1期
gen open_lag2 = L2.open //滞后2期
gen open_forward = F.open //前推1期
gen open_diff = D.open //一阶差分
gen open_diff2 = D2.open //二阶差分
*增长率的计算
sysuse sp500.dta, clear
tsset date
gen r1 = D.close/L.close
- 虚拟变量
//使用generate和replace产生虚拟变量
sysuse nlsw88.dta, clear
gen dum_race2=0
replace dum_race2=1 if race==2 //是否是黑种人
gen dum_race3 = 0
replace dum_race3=1 if race==3 //是否是亚洲人
list race dum_race* in 1/100, sepby(race)
//基于类别变量生成虚拟变量:tab命令
sysuse nlsw88.dta, clear
tab race, gen(dum_r) //根据类别变量race自动生成3个虚拟变量
list race dum_r1-dum_r3 in 1/100, sepby(race)
//基于类别变量生成虚拟变量:xi命令
xi i.rac,prefix(dr_) //自动定义虚拟变量的名称,并附加标签,2个虚拟变量
7.变量类型转换
tostring q,replace //数值型变量转换为字符型
destring q,replace //字符型到数值型
将连续变量转换为类别变量
*(1)等分样本 :group()
sysuse nlsw88.dta, clear
sort wage // 这一步很重要
gen g_wage = group(5) // 等分为五组
tab g_wage
*(2)指定分界点的转换方式 :recode
sysuse nlsw88.dta, clear
sum age
recode age (min/39 = 1) (39/42 = 2) (42/max = 3), gen(g_age)
* 1 if age<=39 右封闭区间
* 2 if 39<age<=42
* 3 if age>42
8.重复样本值处理
*检查重复的样本组合 :duplicates list 命令
sysuse nlsw88.dta, clear
duplicates list race married in 1/20
*删除重复的样本组合 :duplicates drop命令
duplicates drop race married, force
9.离群值处理
(1)删除离群值
sysuse auto, clear
drop if (price>13000)
(2)对数转换
sysuse nlsw88, clear
gen ln_wage = ln(wage)
histogram ln_wage
(3)缩尾处理(用winsor2保险)
sysuse nlsw88.dta, clear
histogram wage
*-双边缩尾
winsor wage, gen(wage_w2) p(0.025)
*-单边缩尾
winsor wage, gen(wage_h) p(0.025) highonly (右侧缩尾)
winsor wage, gen(wage_l) p(0.025) lowonly (左侧缩尾)
(4)截尾处理
sysuse nlsw88, clear
_pctile wage, percentile(1 99)
return list //显示第1百分位和第99百分位的数值
drop if wage<r(r1) // 删除小于第1百分位的样本
drop if wage>r(r2) // 删除大于第99百分位的样本
(5)winsor2命令
- 缩尾
winsor2既可以进行缩尾处理,又可以进行截尾处理。
sysuse nlsw88.dta, clear
// 缩尾处理:winsor2 wage ,cut(1 99)
//默认情况下,winsor2 在缩尾后自动在旧变量名后加上 "_w",即生成缩尾后的新变量 wage_w。
- 截尾
//如果要进行截尾处理,只需在命令后面加上 trim
winsor2 wage ,cut(1 99) trim
//注:这种截尾的方式不会删除样本量,但是会将截尾的变量,对应的样本观测值替换为缺失值。
move wage wage_tr
winsor2 wage, cut(0 99) trim //左端不截尾
winsor2 wage, cut(1 100) trim //右端不截尾
sum wage wage_tr ,detail
10.ssc命令
(1)可使用ssc install newcommand命令来安装(非官方)外部命令。
(2)此外,如果非官方命令不来自ssc,一般需要自行安装,并将所有相关文件下载到指定Stata文件夹中,通常在ado\plus\。
11.help与search命令
help和search都是查找帮助文件的命令,它们之间的区别在于help用于查找精确的命令名,而search是模糊查找。
二、资料的合并
资料的合并分为以下几种:
- 一对一合并【1:1】
- 多对一合并【m:1】
- 一对多合并【1:m】
- 多对多合并【m:m】
1.一对一合并
//待合并的数据
use merge_u.dta, clear
browse
use merge_m.dta, clear
browse
//分别检验master数据和using数据的合并变量是否有重复值
duplicates list date
//若有重复值需剔除:duplicates drop date ,force
//合并方法
use merge_m.dta, clear
merge 1:1 date using merge_u.dta
执行后会生成_merge变量,其值为1表示来自母数据,2为来自数据集的其中一个,3为至少来自于两个数据集。
2.多对一合并
use GTA_FS.dta,clear // 第一个数据集,浏览
browse
use GTA_basic.dta,clear // 第二个数据集,浏览
browse
//合并
use GTA_FS.dta, clear
merge m:1 id using GTA_basic.dta, nogen
3.一对多合并
其实就是m:1的逆向操作,即将命令merge后改为1:m。
4.多对多合并
使用命令:joinby
joinby [varlist] using filename [, options] //joinby命令
5.纵向合并
两个数据库中的“同名变量”会自动对应累叠,也可以理解为追加样本。
use append_m.dta, clear
append using append_u.dta, gen(append_id)
browse
合并要注意几个事项:
- 两个数据资料(dta文件)中的变量名称要相同
- 两个数据资料中的同名变量要具有相同的存储类型。同为文字变量或同为数值变量。