Stata学习

Sata学习

Stata是一套提供其使用者进行数据分析、数据管理以及绘制专业图表的完整及整合性统计软件,stata软件也是目前学者进行实证分析的主流工具。下面就来学习以下吧!

一、do文档

写代码离不开do文档的创建,下面介绍do文档的一些注释、分行等符号命令,利用这些符号,可提高do文档的可读性:

1、注释方式

在这里插入图片描述

2.断行

![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=https%3A%2F%2Fimg-blog3.csdnimg.cn%2Fdirect%2F4f86edc0184e4202a11abc86d9f272fa.png&pos_id=img-wPDkQVLM86edc0184e4202a11abc86d9f272fa.pn

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>20001,否则为0的虚拟变量
//也可以写成如下代码
gen large=1 if q>2000  //这里q>20001,否则为.,所以后面需要替换
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文件)中的变量名称要相同
  • 两个数据资料中的同名变量要具有相同的存储类型。同为文字变量或同为数值变量。
  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小高要坚强

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值