分组加总
bysort year : egen var = sum( )
bysort year group : egen var = mean()
分组统计
by group : sum a b c
排序
sort a b /// 先对a进行排序,再对b排序
sort b a /// 先对b进行排序,再对a排序
gsort -a -b /// 先对a降序排序,再对b降序排序
gsort -b a /// 先对b降序排序,再对a升序排序
gen和egen的区别
使用gen生成的新变量,其变量值是由给定的表达式(exp)计算所得,表达式中可以使用Stata中的任意运算符(如,代数运算符”+” “-“ “*” “\”,逻辑运算符”>” “<” “|” “&” “!”等)和九大类函数;
egen只能使用专属的egen函数来为新变量计算变量值,如mean()、rank()等。值得注意的是,egen函数只能在egen命令下使用,不能用在gen的表达式中,egen命令也无法使用任何运算符或九大类函数来计算生成变量值;
在使用gen命令时,_n和_N是我们常用的下标变量,用于表示行号和总观测值非常方便,但egen却无法使用。这是为什么呢?因为egen专属函数往往以某个变量或某一观测目标为参数,计算某个变量(一列)或观测目标(一行)的某种特征(比如均值,使用mean()),因此无需使用_n和_N。这也提示了egen生成的新变量值往往是一个常数(constant),当然也有egen专属函数的返回值不是常数,而gen生成的变量值则是一个变动值(running value)。
分组取top 10% 数据
bysort year cic va: gen sum = _N
bysort year cic va: gen list = _n
gen big1 = 1 if _n > = _N*0.99
replace big1 = 0 if _n < _N*0.99
gen big5 = 1 if _n > = _N*0.95
replace big5 = 0 if _n < _N*0.95
gen big10 = 1 if _n > = _N*0.90
replace big10 = 0 if _n < _N*0.90
删除缺失值
egen mis = rowmiss(_all)
drop if mis
处理科学计数法显示的情况
stata中科学计数法显示的数据复制到excel中可能会直接忽略后面位数的数字为0.
为了保持精确显示需要用format命令在stata中修改显示格式。
format varlist %14.2g
varlist 是要改变格式的变量;
14 表示我们显示格式的宽度;
2 表示小数点后保留两位;
f 表示固定格式,g表示通用格式,e表示科学计数法。
另外,可以对数据设置左对齐/右对齐,也可以给数据加上千分位符。
format varlist %-14.2g /// - 表示左对齐
format varlist %-14.2gc /// c 表示给数据加上千分位符
面板数据长宽转换
spread 和 gather 命令很直观,但是当我用于多字段时不好用
ssc install tidy
gather a b , variable(放置识别a b的新字段名1) value(放置a b取值的新字段名2)
spread 新字段名1 新字段名2 /// 数据恢复原装
多字段还是要用回经典的reshape
做SDA分解输出结果时,非常好用
reshape wide a b c , i( year) j(group1) / year 不变,按照group1的内容将a b c 字段分成几列显示,不需要展开的字段就不用写在这里。