Stata常用命令集锦【计量经济系列(一)】
🌹꧔ꦿ本博客同时收录于stata技术宝典专栏 与 Python数据分析宝典专栏,感谢各位读者的订阅与支持!
✨更多精彩内容,博主持续更新中······
文章目录
1.数据集的打开、关闭与保存
1.1 导入Excel数据 - import
命令
import excel "E:\stata_projects\data\test1.xlsx", sheet("Sheet1") firstrow
从左到右,依次指定Excel文件目录,sheet工作簿,第一行为列名。
1.2 打开dta数据 -use
命令
以acemoglu.dta
数据集为例。
acemoglu.dta
数据集下载链接:https://pan.baidu.com/s/1FkLvieqBOyRlCBId4sxF5w?pwd=ht9j
提取码:ht9j
打开dta文件类型的数据集,使用use命令。
use "E:\stata_projects\data\acemoglu.dta"
clear表示关闭上一个数据集。
1.3 关闭数据集-clear
命令
如果上一个打开的数据集是被导入的,则需要使用clear将其关闭,才能打开下一个数据集。
clear命令可以单独使用,
clear
use "E:\stata_projects\data\acemoglu.dta"
也可以写成:
use "E:\stata_projects\data\acemoglu.dta", clear
1.4 保存数据-save
命令
使用save加保存的文件名及其目录。
save "E:\stata_projects\data\test1.dta"
这里保存为了stata专有的dta数据文件格式。
2.stata运算符
stata支持的运算符如下:
2.1 代数运算符
符号 | 描述 |
---|---|
+ | 加 |
- | 减 |
* | 乘 |
/ | 除 |
^ | 指数 |
2.2 逻辑运算符
符号 | 描述 |
---|---|
! | 不 |
~ | 不 |
| | 逻辑或 |
& | 逻辑并 |
2.3 比较运算符
符号 | 描述 |
---|---|
> | 大于 |
< | 小于 |
== | 等于(一个等号时表示赋值) |
~=或!= | 不等于 |
>= | 大于等于 |
<= | 小于等于 |
3. 数据查询
3.1 describe
命令
describe用于描述生成内存中的数据集或存储在Stata格式数据集中的数据的摘要。
要获得变量名的紧凑列表,请使用descripe,simple。
语法
describe [varlist] using filename [, file_options]
示例
use "E:\stata_projects\data\acemoglu.dta"
describe
也可以简写为d
obs是数据条数,vars是变量个数,12 Mar 2015 20:26是数据文件的修改日期
然后依次是每个变量的:
- variable name 变量名
- storage type 存储类型(数据类型),
- display format 展示格式,
- value label 变量的值标签,
- variable label(变量标签)
3.2 list
命令
3.2.1 查看一条数据
如果要查看某条数据
则使用list命令
list
list不加任何参数默认查看所有数据。
在上边五个变量中,查看shortnam变量的数据:
list shortnam
呈现效果:
stata中的变量名可以使用前几个字符的简称,使用简称的前提是该简称能够指代的变量名唯一,否则会发生报错ambiguous abbreviation(模棱两可的缩写)。
如查看logem4变量,因为还存在一个logpgp95变量,,所以简可以写成
list loge
而不能写成
list log
3.2.2 条件查询
同时查询shortnam和logem4两个变量,并只要第5个到第10个(总计6个)数据。
指定数据范围使用 in
list s loge in 5/10
第五个到第十个数据中变量logem4大于4.25的。
list s loge in 5/10 if logem4>4.25
4. 删除数据
4.1 keep
命令
keep含义为保留,即,将keep命令指定范围外的数据删除。
如保留logpgp95 > 9的数据。
keep if logpgp95 > 9
然后需要恢复刚刚删除的数据(才能便于博客的继续展示):
clear
use "E:\stata_projects\data\acemoglu.dta"
(即 先清除所有变量,重新读取文件)
4.2 drop
命令
删除logem4大于4的为例
drop if logem4>4
如果想要删除变量,则只需要drop加变量名,或者keep加想要保留的变量的变量名。
5. 排序
5.1 sort
命令
clear
use "E:\stata_projects\data\acemoglu.dta"
sort logpgp95
按照变量 logpgp95 升序(从小到大)排列。
5.2 gsort
命令
5.2.1 gsort
语法
gsort按指定变量的升序或降序排列观察值,所以它和sort的不同之处在于,sort只生成升序排列。且得到的数据结构中没有数据类型为字符串类型的变量。
语法
gsort [+|-] varname [[+|-] varname …] [, generate(newvar) mfirst]
5.2.2 gsort
降序
gsort -logpgp95
5.2.3 gsort
升序
gsort +logpgp95
或
gsort logpgp95
6. 统计分析摘要-summarize
命令
summarize计算并显示各种单变量摘要统计信息。如果未指定varlist,则会计算数据集中所有变量的汇总统计信息。
语法
summarize [varlist] [if] [in] [weight] [, options]
且最短可缩写为su
summarize
查看更为详细的摘要统计信息,则加上可选参数(options),detail
summarize,detail
执行结果如图所示,其中圈出的部分是每个变量的标签,作为输出表格中每个变量的唯一标识。
7.生成新变量 -gen
命令
gen是generate的简写,用于生成新的变量。如:
gen y1 = sum( logem4 )
gen y2 = sqrt(logem4)
gen y3 = logem4*2
8. 修改数据
数据初始状态如下图所示:
8.1 修改单个数据
将第11条数据的avexpr
变量的值改为8。
replace avexpr = 8 in 11
8.2 按条件修改多个数据
将表格中第2条数据到第20条数据范围内,变量logpgp95大于9.8且小于9.99的数据修改为8为例:
replace logpgp95 = 8 in 2/20 if logpgp95>9.8 & logpgp95<9.99
9.数据的合并
9.1 纵向合并 -append
命令
数据集test1和数据集test2如下:
将两组数据纵向合并,保存为test3.dta。
use test1,clear
append using test2
save test3,replace
其中append命令是将数据集test2纵向合并到了当前数据集(test1),但是并没有更改任何文件。这个时候使用list命令看到的是:
查看test3
use test3,clear
9.2 横向合并 merge
命令
test4
test5
横向排序需要选择一列作为基准列,这里以变量id为例,合并前需要先使两个合并的数据集有着相同的id(值相同,顺序也要相同),这里先使用sort方法进行排序。
use test4,clear
sort id
save test6,replace
use test5,clear
sort id
merge id using test6
save test7
表格合并结果如图所示
指令说明:test4
与test5
为原始数据,这里先将test4
的排序结果保存为test6
,然后use数据test5
,对test5
排序。这里将test5
作为主数据,将test4
的排序结果test6
合并在test5
上。所以不需要额外保存test5
的排序结果。最终,将合并结果保存为test7
。
此外,合并过程会产生标识变量 _merge,为了不影响数据操作过程,通常使用drop _merge将其删除。
drop _merge
10.数据重整
10.1 reshape
命令
stack命令的官方说明文档如下
通过stack命令,可以成功实现如图所示的long数据可wide数据之间的转化。
以mywide.dta数据集为例,数据具体如下:
将如图所示的wide数据转换为long数据,
命令示例如下:
use mywide
reshape long math economy, i(id name) j(year)
其中i()中的变量名是保持不变的变量名,j()中的变量名是新添加的一列的变量名。
除了指定的不变的变量名之外,只有命名方式为 字符+数字形式的变量名,如economy2003,economy2004才会被合并,且变量名中的数值会作为新的变量的值,而math2003和math2004会变成math,economy2003和economy2004则会变成economy。
不满足这样形式变量名的变量,会保持不变。
处理效果具体如下:
沿着上边的命令继续执行,将刚刚得到的long数据再变为wide数据:
只需要将reshape long改为reshape wide,其他部分不变:
reshape wide math economy, i(id name) j(year)
10.2 多列转一列 stack
命令
还使用mywide数据集:
将数据集中的math2003 economy2003 math2004 economy2004四个变量合并成为一个新的变量,且变量名为x:
最后并删除产生的标识变量_stack:
use mywide
stack math2003 economy2003 math2004 economy2004,into(x) clear
drop _stack
10.3 转置 xpose
命令
依然使用mywide.dta数据集:
将其转置:
use mywide
xpose, clear
转置结果如图所示,可以看到,原来数据类型为字符串类型的变量,在转置后成为了缺失值。因为每个变量中的所有数据必须属于同一数据类型。