stata数据处理

news2024/9/21 16:33:28

stata数据处理–潘登同学的stata笔记

文章目录

    • stata数据处理--潘登同学的stata笔记
  • 数据导入、导出
    • 使表格第一行成为变量标注(label)
  • 数据合并
    • 横向与纵向合并
    • 一对多与多对一横向合并
  • 缺失值处理
    • 查看缺失值
    • 替换缺失值
    • 缺失值填充
  • 离群值处理
    • 取对数的方法
    • 截尾处理、缩尾处理
  • 分组统计
    • 列表统计
    • 分组回归
  • egen函数做数据处理
    • 其他egen函数
  • 文字日期变量的处理
    • 将季度数据调整为月度数据
  • 抽样
    • 不放回抽样
    • 有放回抽样

数据导入、导出

数据导入:

import excel auto.xls, firstrow sheet(Sheet1) clear 
br foreign
encode foreign, gen(Cartype2) label(foreign)
br Cartype2 
label list foreign

save myauto.dta, replace  //保存为 Stata 格式数据文件
  • firstrow 表示把 Excel 的第一行视为变量名称
  • sheet() 中填入 Excel 中的 sheet 名称
  • Excel2003 文件后缀为 .xls, Excel2007 文件后缀为 .xlsx

数据导出:

sysuse auto.dta, clear
export excel auto.xls, firstrow(variables) replace  //首行为变量名称
shellout auto.xls  // 打开 excel 文档 

export excel auto.xlsx, firstrow(varlabels) replace  //首行为变量标签
shellout auto.xlsx  // 打开 excel 文档 
  • firstrow(varlabels):保存变量名称
  • nolabel:不保存变量名称

其他导入方式

help insheet  //导入 -tab- 分隔的数据

help infile   //导入  逗号 分隔的数据 

help usespss  //将 SPSS 格式的数据导入 STATA

help fdasave  //Save and use datasets in FDA (SAS XPORT) format

help usesas   //将 SAS 格式的数据导入 STATA 

使表格第一行成为变量标注(label)

有时在Excel整理数据时,会把第一行写为变量名,第二行写为变量标注(label)。在导入Stata中时,第一行可以自动转化为变量名,但第二行标注会在导入时成为第一个标量。

foreach var of varlist * {                                // 对每一个变量
  label     variable    `var'             "`=`var'[1]'"   // 把变量标注为第一行的内容
  replace               `var' = ""   if   _n == 1         // 把第一行改为空
  destring              `var'        ,    replace         // 把变量destring

}
drop in 1                                                 // 删除第一行

数据合并

横向与纵向合并

merge 1:1 varlist using filename [, options]
  • varlist表示按照哪个变量来合并

横向合并:增加变量
在这里插入图片描述

// 查看待合并的数据
use merge_m.dta, clear
browse
use merge_u.dta, clear
br 
// 横向合并:增加变量
use merge_m.dta, clear        // master dataset
merge 1:1 date using merge_u  // using  dataset
des

在这里插入图片描述

纵向合并:追加样本
在这里插入图片描述

use append_m.dta, clear
br
use append_u.dta, clear
br

// 纵向追加
use append_m.dta, clear
append using append_u.dta
des

在这里插入图片描述

一对多与多对一横向合并

多对一横向合并

merge m:1 varlist using filename [, options]
  • varlist表示按照哪个变量来合并
use GTA_FS.dta,clear    //上市公司财务资料, id-year, Panel
br 
use GTA_basic.dta,clear //上市公司基本资料,只有 id 没有 year
br

use GTA_FS.dta, clear
merge m:1 id using GTA_basic.dta
br

在这里插入图片描述

_merge 变量的含义:

  • _merge==1 obs. from master dataset
  • _merge==2 obs. from only using dataset
  • _merge==3 obs. from at least both datasets

一对多横向合并

merge 1:m varlist using filename [, options]

本质上跟上面的一样,只是master dataset不同

use GTA_basic.dta, clear
merge 1:m id using GTA_FS.dta, nogen
browse
order id year
xtset id year 

在这里插入图片描述

缺失值处理

查看缺失值

sysuse auto, clear
count if rep78==.

需要注意的是:

  • 有些命令,如 sum, regress, generate 等,会自动忽略缺漏值;
  • 有些命令,如 count, keep 等,则会将 “.” 视为一个无穷大的数值

使用回归的方式来标记不包含缺失值的样本(注意是样本层面,只要有一个变量缺失,整个样本就算缺失)

sysuse nlsw88.dta, clear
sum wage industry tenure hours
reg wage industry tenure hours  //回归不是我本意
ereturn list
//	e(sample) 如果一个样本中至少有一个变量有缺失值,则为0,变量齐全则为1
sum wage industry tenure hours if e(sample)==1

gen yes = e(sample)
sort yes
browse yes wage industry tenure hours

sum wage industry tenure hours if yes==1
keep if yes==1  // 删除缺漏值

在这里插入图片描述

替换缺失值

常见的缺漏值标记符号:N.A. | N/A | -99 | -97 | -9999

insheet using "D3_miss01.txt", clear
mvdecode x1 x2, mv(-97 -99 -999)    // 批量替换

在这里插入图片描述

// 数值型缺漏值
mvdecode x1 x2, mv(-97 -99 -999)    //批量替换
// 文字型缺漏值
replace x3 ="."  if x3== "N/A"
replace x3 ="."  if x3== "N.A."
destring x3, replace  // 转换为数值变量

在这里插入图片描述

缺失值填充

fillmissing语法

[bysort varlist]: fillmissing varname [if] [in], [with(with_options)]
  • with(any):最好用来填充常量变量 (constant variable),因为会任意从非缺失值中填充缺失值。如果未指定 with_options,则作为默认值;
  • with(previous):使用前面的值填充当前的缺失值。如果前面的值也缺失,则当前值保持缺失状态。另外,该选项并不对数据进行排序操作,因此无论当前数据的排序如何,填充都将使用当前的排序状态来标识当前缺失值和前面的观测值;
  • with(next):与 with(previous) 类似,使用后面的值填充当前的缺失值。如果后面的值也缺失,则当前值保持缺失状态。另外,该选项并不对数据进行排序操作,因此无论当前数据的排序如何,填充都将使用当前的排序状态来标识当前缺失值和后面的观测值;
  • with(first):使用当前排序状态下的第一个值替换所有的缺失值。或者搭配 bysort,将使用每个组的第一个值;
  • with(last):使用当前排序状态下的最后一个值替换所有的缺失值。或者搭配 bysort,将使用每个组的最后一个值;
  • with(mean):使用非缺失值的平均值替换缺失值。变量类型只能为数值型 (numeric variable);
  • with(median):使用非缺失值的中位数替换缺失值。变量类型只能为数值型 (numeric variable);
  • with(min):使用非缺失值的最小值替换缺失值。变量类型只能为数值型 (numeric variable);
  • with(max):使用非缺失值的最大值替换缺失值。变量类型只能为数值型 (numeric variable)。
clear all
input id k
  id   k
  1   3
  1   5
  1   .
  1   .
  1   7
  2   .
  2   .
  2   4
  2   8
  2   .
end

gen any = k
bys id: fillmissing any, with(any)
gen previous = k
bys id: fillmissing previous, with(previous)
gen next = k
bys id: fillmissing next, with(next)
gen first = k
bys id: fillmissing first, with(first)
gen last = k
bys id: fillmissing last, with(last)
gen mean_ = k
bys id: fillmissing mean_, with(mean_)
gen median_ = k
bys id: fillmissing median_, with(median_)
gen min = k
bys id: fillmissing min, with(min)
gen max = k
bys id: fillmissing max, with(max)
list,noobs

在这里插入图片描述

离群值处理

取对数的方法

sysuse nlsw88, clear
gen ln_wage = ln(wage)

histogram wage
histogram ln_wage

twoway (histogram    wage, color(green))  ///
        (histogram ln_wage, color(yellow))

在这里插入图片描述

注意:对数转换后,系数估计值的含义会发生变化,解释结果时要慎重

截尾处理、缩尾处理

截尾处理:

// 以 1th 和 99th 百分位数值为临界点
sysuse nlsw88, clear
winsor2 wage, cuts(1 99) by(collgrad) suffix(_tr) trim 
sum wage*
des wage*

在这里插入图片描述

缩尾处理:

// *-基本原理
sysuse nlsw88, clear
sum wage, detail

replace wage=1.930993 if wage<1.930993 
replace wage=38.70926 if wage>38.70926

// *-winsor2 命令
sysuse nlsw88, clear
winsor2 wage, cuts(1 99) // cuts(1 99) 选项可以省略; 会自动生成新变量 wage_w
sum wage*
des wage*

// *-一次性处理多个变量
sysuse nlsw88, clear
winsor2 wage hours tenure, cuts(1 99) replace
des wage* hours* tenure*

在这里插入图片描述

分组统计

列表统计

一维列表:

sysuse nlsw88.dta, clear
	
// *-频数列表
tabulate industry      // tabulate 可以简写为 tab
// *-柱状图
graph hbar (count) idcode, over(industry)         ///
      blabel(bar, position(outside) format(%3.0f) ///
      color(blue) size(small))

在这里插入图片描述

在这里插入图片描述

二维列表:

sysuse nlsw88.dta, clear

tab industry collgrad  // 频数
tab industry collgrad, column nofreq //占比

tabplot industry collgrad ,  ///
	      bfcolor(none) horizontal barw(1)  ///
          percent(collgrad) subtitle(% at each industry) ///
		  showval(offset(0.05))

在这里插入图片描述

在这里插入图片描述

变量的统计特征:

sysuse nlsw88.dta, clear

// *-变量的统计特征
tab industry collgrad, summarize(wage) means

// *-图形呈现
graph hbar (mean) wage, over(industry) over(collgrad) ///
        intensity(*0.4) scheme(s1mono)                  ///
        blabel(bar, position(outside) format(%3.1f)     ///
                    size(small)) 

在这里插入图片描述

在这里插入图片描述

分组回归

先将连续变量转换为类别变量

sysuse nlsw88, clear
sort wage
gen g_wage = group(5)  //工资等分为五组
br wage g_wage
tab g_wage

在这里插入图片描述

做分组的描述性统计

label define g_wage_label 1 "Low" 5 "High"
label value  g_wage g_wage_label
tabstat wage age married union collgrad south, ///
            stat(mean) by(g_wage) format(%4.2f)

在这里插入图片描述

做分组回归

local x "age ttl_exp married union collgrad south c_city"
reg wage `x' if g_wage==1, robust
est store Low
reg wage `x' if g_wage==3, robust
est store Mid  
reg wage `x' if g_wage==5, robust
est store High
reg wage `x'             , robust
est store Full

local m "Low Mid High Full"
esttab `m', mtitle(`m') nogap s(r2 r2_a N) b(%6.3f) ///
        star(* 0.1 ** 0.05 *** 0.01) 

在这里插入图片描述

其他方法:根据分位数进行分组

// 在每个行业内部根据 33th, 66th 百分位分成三组
bysort industry: quantiles wage, gen(p_wage) nq(3) 
tab p_wage

在这里插入图片描述

egen函数做数据处理

egen函数是官方命令提供的函数,egenmore是Stata 用户提供的外部函数,文子处理的利器

sysuse "nlsw88.dta", clear

// 行业中位数
bysort industry: egen wage_p50 = median(wage)
gen wage_diff = wage-wage_p50

// 行业标准差	
bysort industry: egen wage_sd = sd(wage)

// 重新编码
sort industry occupation
browse industry occupation
egen indocc123 = group(industry occupation) 

应用实例:计算几何加权实际汇率
E R R = ∏ i = 1 N ( x i w i ) ERR = \prod_{i=1}^{N}(x_i^{w_i}) ERR=i=1N(xiwi)
其中 x x x是汇率, w w w是权重

clear
input firm country   exch     export 
    1 		1 	    8 	  	  60 
    1 		2 	    0.03 	  50 
    1 		3 	   10 	  	  80 
    2 		2 	    0.03 	  68 
    2 		4 	    3 	  	  80 
    3 		2 	    0.03 	  200 
    3 		3 	   10 	  	  90 
    3 		4 	    3 	  	  250 
    3 		5 	    1.1 	  120
end

计算权重

bysort firm: egen weight = pc(export), prop
list, sepby(firm)

在这里插入图片描述

计算EER:思路是将连乘积的问题转化为求和问题,对数化

gen lnexch = ln(exch)
gen lnexch_x_weight = lnexch*weight
bysort firm: egen sum_exch = total(lnexch_x_weight)
gen EER = exp(sum_exch)
list, sepby(firm)

在这里插入图片描述

其他egen函数

  • egen_inequal // 生成不平等和贫困指数的函数
  • egenmmed // create a moving median
  • egenmsd // create a moving standard deviation
  • egenms // create a moving sum
  • asgen // generates weighted average mean using an existing variable as weight
  • egenmisc // provide various egen functions
  • egenmore // 各类新增的扩展函数
  • ereplace // 这个一定要介绍
  • ewma // calculates an exponentially weighted moving average
  • gtools // provide a fast implementation of common group commands
  • tsegen // call an egen function using a time-series varlist

文字日期变量的处理

导入数据

clear
input str10 date 	str10 date_str 
	  1967q1    	"01/29/1960"
	  1967q2		"01/30/1960"
	  1967q3		"01/31/1960"
	  1967q4		"02/01/1960"
	  1968q1		"02/02/1960"
end

在这里插入图片描述

gen date_back1 = date(date_str, "MDY") // 转化为数字格式
format date_back1 %td //定义日期显示格式

在这里插入图片描述

将季度数据调整为月度数据

* 示例数据
clear
input str10 date float value
"2017-03-31" 10
"2017-06-30" 20
"2017-09-30" 30
"2017-12-31" 40
end

* 将日期格式转换为日期变量
gen date_var = date(date, "YMD")

* 按日期排序并设置为时间序列
sort date_var
tsset date_var

* 将季度数据扩展到月度
expand 3
sort date_var
scalar start_mon = mofd(date_var)
gen month = start_mon + _n - 3



* 输出结果
format month %tm
list

在这里插入图片描述
日期变量互转参考表
在这里插入图片描述

抽样

不放回抽样

随机抽样

// 生成随机数
clear 
set obs 10
gen x = _n
save P4_data1.dta, replace

// *-抽取 30% 的观察值
use P4_data1, clear
browse
sample 30

// *-随机抽取 5 个观察值             
use P4_data1, clear
sample 5, count
browse

分组抽样

// *-抽取 50% 的观察值 by(id)
use P4_xtdata, clear
browse
sample 50, by(id)
xtset id year

// *-抽取 50% 的观察值 by(race)
sysuse nlsw88, clear
table race
sample 50, by(race)
table race

在这里插入图片描述

分块抽样

// 机抽取三家公司 cluster(id)将id相同的样本合并为一个 wor 不放回抽样
use P4_xtdata, clear
browse
gsample 3, cluster(id) wor

use P4_xtdata, clear
browse
gsample 40, cluster(id) wor percent //随机抽取 40% 的公司

有放回抽样

use P4_data1.dta, clear
browse
bsample
sort x

在这里插入图片描述

对面板数据的有放回抽样

use P4_xtdata, clear
browse

bsample, cluster(id) idcluster(idnew)
xtset idnew year

有放回抽样的应用:bootstrap 标准误

sysuse auto, clear
	
bootstrap, reps(300):  ///
        reg price weight mpg foreign, noheader

// *-等价写法:
reg price weight mpg foreign,  ///
        vce(bootstrap, reps(300) seed(1357))

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/416877.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

银行数字化转型导师坚鹏:银行数字化转型痛点、路径与对策

银行数字化转型痛点、路径与对策课程背景&#xff1a; 很多银行存在以下问题&#xff1a; 不知道银行数字化转型&#xff1f; 不清楚数字化转型对银行发展有什么影响&#xff1f; 不知道数字化转型对银行有什么机遇&#xff1f; 学员收获: 学习银行数字化转型的发展现状与成…

2021四川省icpc省赛H题 Nihongo wa Muzukashii Desu 日本語は難しいです!

日本語は難しいです&#xff01; それは難しくないと思うだけど 传送门 一些吐槽 这题好像恶心了不少学弟啊 其实只要读懂了题就很好做, 对于我这种日语高考生来说确实是有点犯规了不过当时我写的时候不能用翻译一看题面一大串英文就被我pass掉, 后面看到一大堆人过了我才去写…

迅为RK3568开发平台人工智能人脸识别全国产解决方案赋能NVR

人脸识别服务&#xff0c;能够在图像中快速检测人脸、分析人脸关键点信息、获取人脸属性、实现人脸的精确比对和检索。可应用于身份验证、电子考勤、客流分析等场景人脸检测、比对、搜索&#xff0c;人脸库管理等。 为什么使用它呢&#xff1f; 维持公众聚集场所的秩序 在餐厅…

Apache的配置与运用

1. web虚拟主机的构建 虚拟Web主机指的是在同一台服务器中运行多个Web站点&#xff0c;其中每一个站点实际上并不独立占用整个服务器&#xff0c;因此被称为“虚拟”Web 主机。通过虚拟 Web 主机服务可以充分利用服务器的硬件资源&#xff0c;从而大大降低网站构建及运行成本。…

2.3.2 单链表的插入结点操作

--单链表示意图 一、按位序插入&#xff08;带头结点&#xff09; ①表头插入 注意点 1.i1&#xff0c;while循环不执行 2.时间复杂度为O&#xff08;1&#xff09; 3.p&#xff01;NULL表示指针p有指向结点 4.头结点为第0个结点 5.pL表示指针p和L指向位置相同&#xff0…

ORB_SLAM3_优化方法 Pose优化

PoseOptimization PoseOptimization主要的作用是利用重投影优化单帧的位姿,主要用在Tracking的几种跟踪模式TrackWithMotionModel、TrackReferenceKeyFrame、 TrackLocalMap、Relocalization中 输入 优化变量观测帧的Pose帧的MapPoint帧的KeyPoint初始化 //创建优化器 g2o…

4.Java逻辑控制语句

Java逻辑控制语句 在实际生活中&#xff0c;我们的生活不是一成不变的&#xff0c;很多时候需要我们去选择&#xff0c;大到人生的十字路口&#xff0c;小到今天晚上吃什么&#xff0c;选择无处不在。小的选择决定了我们一件小事的走向&#xff0c;大的选择可能会改变我们人生…

大模型“云上经济”之权力游戏

文丨谭婧光阴者百代之过客。世人皆过客&#xff0c;软件亦如此。人工智能已有新旧之分。网友戏称&#xff0c;新人工智能是ChatGPT&#xff0c;旧人工智能是“之前那些”。历史在重演。云计算在美国问世的时候&#xff0c;否定论调居多。一个常见的否定论调是「做生意不用上云」…

vite+vue3使用UEditorPlus ,后端PHP

vitevue3使用UEditorPlus什么是UEditorPlus功能亮点前端安装安装vue-ueditor-wrap3.x下载 UEditorPlus在main.js注册组件v-model 绑定数据后端配置效果百度富文本编辑器是目前所有编辑器中功能最丰富的&#xff0c;但长时间不进行维护了。之前写了一篇使用UEditor的教程&#x…

回调函数含义查询云记debug调试

回调函数 同步回调函数 回调函数通常就是当父函数执行完后&#xff0c;再执行通过传参进来的函数&#xff0c;当然也可以不传参&#xff0c;直接在父函数内部调用回调函数 注&#xff1a;立即执行回调&#xff0c;执行完回调代码才会继续往下执行 function a(callback) {a…

力扣:两数之和(哈希表)

1、两数之和 1、问题描述 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那两个整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一个元素在答案里不能重复出现。…

如何利用超级电容设计简单的不间断电源

如何利用超级电容设计简单的不间断电源 在许多应用中&#xff0c;电源电压无论在什么情况下都持续可用是很重要的。要确保这一点有时并不容易。一种新概念可以为设计极其紧凑的不间断电源提供一种优化解决方案。 问题: 在电源关键型应用中&#xff0c;如何更轻松地获得持续、…

【Android平板编程】远程Ubuntu服务器code-server编程写代码

文章目录前言1.ubuntu本地安装code-server2. 安装cpolar内网穿透3. 创建隧道映射本地端口4. 安卓平板测试访问5.固定域名公网地址5.结语前言 本次教程将在 Ubuntu 服务器环境下安装 code-server &#xff0c;并使用 Android 安卓平板远程 Ubuntu 服务&#xff0c;进行远程编程开…

Python pandas和numpy用法参考(转)

以下是转载&#xff1a;Python pandas用法 - 简书介绍 在Python中&#xff0c;pandas是基于NumPy数组构建的&#xff0c;使数据预处理、清洗、分析工作变得更快更简单。pandas是专门为处理表格和混杂数据设计的&#xff0c;而NumPy更适合处...https://www.jianshu.com/p/840ba1…

为什么你这么累,销量还不如那些轻松工作的同行?

管理混乱 忙碌却不见成效 在工业品行业做了10多年的小张&#xff0c;最近向我吐槽&#xff1a;每天忙得团团转&#xff0c;结果销售业绩还不如那些整天轻松工作的同行。几番沟通下来&#xff0c;发现小张每天要做这么多的工作&#xff0c;不忙才怪&#xff01; 管理员工&#x…

xqueue:基于C语言实现的循环队列缓冲区

文章目录1. 为什么需要FIFO2. FIFO的存取顺序3. FIFO的代码实现4. 开源地址精选1. 为什么需要FIFO FIFO 是First-In First-Out的缩写&#xff0c;它是一个具有先入先出特点的缓冲区。 可以理解成一个大的水池&#xff0c;水对应数据&#xff0c;注水速度对应数据输入的频率&a…

第13章_泛型(Generic)

第13章_泛型(Generic) 讲师&#xff1a;尚硅谷-宋红康&#xff08;江湖人称&#xff1a;康师傅&#xff09; 官网&#xff1a;http://www.atguigu.com 本章专题与脉络 1. 泛型概述 1.1 生活中的例子 举例1&#xff1a;中药店&#xff0c;每个抽屉外面贴着标签 举例2&#xf…

【Pytorch】神经网络的基本骨架

【Pytorch】神经网络的基本骨架nn.module的基本使用卷积操作神经网络卷积层最大池化的使用-池化层nn.module的基本使用 nn.module是所有神经网络的基本类&#xff0c;其他的所有神经网络都是继承该类&#xff0c;在此基础上进行修改。 上面的forward函数&#xff0c;首先进行卷…

postman进行post、get参数传递及中文乱码和各类型参数传递和json格式传参和日期型参数传递和响应数据传回

postman是一种测试工具 用postman直接在其上输入参数名和参数值就行&#xff0c;不用区分post和get请求方法&#xff0c;当然java代码要改变一点&#xff0c;在响应注解的方法里面添加和postman中输入的参数名一样的形参 get请求&#xff1a; 代码&#xff1a;注意在响应注解…

JUC源码系列-AQS独占锁获取

前言 AQS&#xff08;AbstractQueuedSynchronizer&#xff09;是JAVA中众多锁以及并发工具的基础&#xff0c;其底层采用乐观锁&#xff0c;大量使用了CAS操作&#xff0c; 并且在冲突时&#xff0c;采用自旋方式重试&#xff0c;以实现轻量级和高效地获取锁。 AQS虽然被定义…