stata变量引用–潘登同学的stata笔记
文章目录
stata变量引用--潘登同学的stata笔记
变量生成gen命令通配符:*, ?, -因子变量时间序列
变量命名、前缀与标签变量命名、添加前缀通配符与批量重命名变量标签数字-文字对应表CSMAR数据处理
查看、查找变量单值、暂元单值暂元利用暂元写循环语句
变量生成
gen命令
sysuse nlsw88, clear
gen lnwage = ln(wage)
gen yes_white = (race==1) // [=exp]
tabstat lnwage hours married age, by(yes_white) s(mean) f(%3.2f)
![在这里插入图片描述](https://img-blog.csdnimg.cn/b3c206e7da4647989f6b013fb94ff9ab.png#pic_center)
通配符:*, ?, -
sysuse nlsw88, clear
sum age race married never_married grade
sum age-grade // 顺序出现的变量,列出头尾两个变量即可
sum s* // "*" 是孙悟空,可以表示`任何'长度的字母或数字
sum *arr* // 可以用在任何位置
sum ?a?e // "?" 是猪八戒,只能替代`一个'长度的字母或数字
![在这里插入图片描述](https://img-blog.csdnimg.cn/aa91cd1cac48474a8cd8339f2afa51fe.png#pic_center)
因子变量
i: 表示将变量转换为虚拟变量c: 表示变量为连续型变量(只有加上c或i才能参与后续交乘项平方项的运算)#: 相当于乘号##: 能同时具有更低阶的交乘项
sysuse nlsw88, clear
tab race // 类别变量
reg wage tenure hours i.race i.industry // 种族和行业虚拟变量
reg wage tenure hours age c.age#c.age // 平方项 #
reg wage tenure hours c.age##c.age // 等价命令,简写 ##
reg wage tenure hours i.marr i.marr#c.hours // 交乘项
reg wage tenure c.age##c.age##c.hours // 能同时有5项
![在这里插入图片描述](https://img-blog.csdnimg.cn/71cc74e4dcb941399ce531bce4681333.png#pic_center)
时间序列
sysuse sp500, clear
tsset date // 对日期排序
gen t = _n
tsset t
gen lnP = ln(close)
gen return = D.lnP //收益率(D.表示一阶差分)
gen Lreturn = L.return //前一天的收益率(L.表示一阶滞后项)
gen L2return = L2.return //前两天的收益率
reg return L.return L2.return
reg return L(1/3).return F(1/2).return // F表示滞后项的反义词 //回归时不必产生这些变量
![在这里插入图片描述](https://img-blog.csdnimg.cn/8ee06391d0cf483a8decfc2367f821fb.png#pic_center)
![在这里插入图片描述](https://img-blog.csdnimg.cn/64bfb864eb3245fd8c14a6acf7207411.png#pic_center)
变量命名、前缀与标签
变量命名、添加前缀
sysuse auto, clear
rename make mk
rename (price rep78) (Price REP78) //批量重命名
rename mpg foreign trunk, upper //大写
sysuse auto, clear // D2_gen.do
renvars price mpg wei, prefix(d1_) //批量添加前缀或后缀
des
![在这里插入图片描述](https://img-blog.csdnimg.cn/21d3e9de653e4ea59dc45380536260bb.png#pic_center)
通配符与批量重命名
// 把前缀为 jan 的变量全部重命名为后缀为 1 的变量名,如 janstat → stat1
rename jan* *1
// 去掉 jan 前缀
rename jan* *
// * 去掉 jan 后缀
rename *jan *
// 将前缀为 jan 的四位字符重命名为后缀为 1 的两位字符,如 jans → s1,janstat 不会发生变化
rename jan? ?1
// 删除 jan,如 janstat 重命名为 stat,injanstat → instat,subjan → sub
rename *jan* **
// 命名为 jan 前的字符,如 injanstat → in,statjan → stat(与下一个进行区分)
rename *jan* *
// 命名为 jan 后的字符,如 injanstat → stat
rename *jan* .*
// 为后缀为 pop 的变量名增加前缀 jan,如 age1pop → janage1pop
rename *pop jan=
// 所有变量增加前缀 pre
rename whatever pre=
// * 所有变量增加后缀 jan
rename whatever =jan
// 所有变量增加前缀 pre 且增加后缀 fix
rename whatever pre=fix
// 将由字母 v+ 数字的变量名重命名为 stat+ 数字,如 v1→stat1 v10→stat10
rename v# stat#
// 增加括号后表示重命名 v 后面跟 1 位数字的变量,v10 不会被重命名
rename v(#) stat(#)
// stat10 → stat_2010,stat2 不会发生改变
rename stat(##) stat_20(##)
// * stat1 → stat_2001,stat10 不会发生改变
rename stat(#) stat_200(#)
// 重命名为倒序变量名,如 v8 → v1,v7 → v2,v6 → v3
rename v# v#, renumber sort
// * 数字起始值 10,如 v1 → v10,v2 → v11
rename v# v#, renumber(10)
// a → v1,b → v2,c → v3
rename (a b c) v#, addnumber
// a12 → a21,a32 → a23
rename a(#)(#) a(#)[2](#)[1]
rename命令选项:
addnumber:在末尾添加顺序编号;addnumber(#):在末尾添加指定起始值的顺序编号;renumber:按顺序重新编号;renumber(#):指定起始值开始顺序编号;sort:编号前进行排序;dryrun:报告但不进行重命名;r:将变量名储存在 r() 中,编程时调用;upper:将字母转换为大写;lower:将字母转换为小写;proper:将字母转换为首字母大写。
变量标签
sysuse auto, clear
des
label var price "汽车价格($)"
label var rep78 "维修次数"
des //查看效果
![在这里插入图片描述](https://img-blog.csdnimg.cn/cc26e686896a43be826517ba36e57d08.png#pic_center)
数字-文字对应表
sysuse auto, clear
*-Step1: label define, 定义标签内容
label define rep78_label 1 "很好" 2 "较好" 3 "中等" 4 "较差" 5 "很差"
*-Step2: label value, 将变量与标签内容关联起来
label value rep78 rep78_label
label list rep78_label //查看对应关系
des2 rep78 //建议采用这种方式, 简洁
br rep78
tab rep78 foreign
![在这里插入图片描述](https://img-blog.csdnimg.cn/753d68c1520348518b1f781b28380d90.png#pic_center)
![在这里插入图片描述](https://img-blog.csdnimg.cn/bc176a7b6de547aca652e9d3ee8f6388.png#pic_center)
CSMAR数据处理
从CSMAR数据库中下载的企业财报数据,会把第一行作为独特代码,第二行作为变量标注(label),第三行写单位。在导入Stata中时,第一行可以自动转化为变量名,但第二行标注会在导入时成为第一个标量。
下面这段代码可以至直接将第三行删除,第二行转为变量label。
drop if _n == 2
foreach var of varlist * { // 对每一个变量
label variable `var' "`=`var'[1]'" // 把变量标注为第一行的内容
replace `var' = "" if _n == 1 // 把第一行改为空
destring `var' , replace // 把变量destring
}
drop in 1 // 删除第一行
查看、查找变量
sysuse nlsw88, clear
des //几乎每一笔数据进来都要先执行该命令
des2 //完全替代了 des 命令
![在这里插入图片描述](https://img-blog.csdnimg.cn/bf4a3e004d0a4fa4bc513a8da17d368b.png#pic_center)
查找变量:lookfor
use "$path\_Data\d_lookfor", clear
lookfor "现金流"
lookfor "报酬"
![在这里插入图片描述](https://img-blog.csdnimg.cn/a27702b104c14353ab4a503260726cce.png#pic_center)
单值、暂元
单值
定义单值: 存放数字
scalar a = 3
scalar b = ln(a) + 3^a
dis a
dis b
定义单值: 存放字符串
scalar c = .a
dis c
scalar s1 = "hello, Arlion"
scalar s2 = substr(s1,1,5) // 单值的引用很简单
dis s1
dis s2
执行命令后的单值结果:
sysuse auto,clear
sum price
return list // sum之后return list能将sum的结果保存到r中
dis r(N)
dis r(sd)
![在这里插入图片描述](https://img-blog.csdnimg.cn/0f0e39116ed24f4c8c9b3409b0700024.png#pic_center)
reg price weight length mpg // see R9_esttab.do
ereturn list
est store r1
reg price weight length mpg foreign
est store r2
esttab r1 r2, nogap scalar(r2 r2_a F N)
![在这里插入图片描述](https://img-blog.csdnimg.cn/5eae7409accd40d6a344f7c78b221e3a.png#pic_center)
一些特殊的单值:
help _variables // 系统变量
sysuse nlsw88, clear
dis _N //样本数
creturn list // 系统参数设置
dis c(current_time)
暂元
局域暂元 (local) :只能存在于一次运行之中
local a = 5
display `a'
// 注意应用方法 左边是` 右边是'
local b = `a' + 7
dis `b'
在stata中,他能通过字符串来引用变量(面向对象的编程语言是不行的(如py))
scalar x_1 = 7
local y = "x"
dis `y'_1
![在这里插入图片描述](https://img-blog.csdnimg.cn/84f829a2c6bb4de8a7e19f23fb07ddc9.png#pic_center)
用于存放变量名称
sysuse auto, clear
local xx "price weight mpg foreign"
// *local xx "price weight mpg foreign i.rep78"
sum `xx'
reg `xx'
![在这里插入图片描述](https://img-blog.csdnimg.cn/613ff1ab6c7243bb8fa6a084ddd51d68.png#pic_center)
sysuse nlsw88, clear
reg wage hours i.race
local b0 = _b[_cons] //常数项估计值
local b1 = _b[hours] //系数估计值
local b2 = _b[2.race] //虚拟变量的估计值
local b3 = _b[3.race]
local se_b1 = _se[hours] //标准误
dis "wage = `b0' + `b1'*hours + `b2'*2.race + `b3'*3.race"
gen wage_fit = `b0' + `b1'*hours + `b2'*2.race + `b3'*3.race
br wage*
dis "SE(b1) = " `se_b1'
暂元中的暂元:
local a1 = 2
local a2 "var"
local a3 = 2*`a1'
local a4 `a`a1''
dis `a1'
dis "`a2'" // 因为a2是var所以需要用双引号扩住)
dis `a3'
dis "`a4'"
![在这里插入图片描述](https://img-blog.csdnimg.cn/3fdcdab8091d4e8d926f5748a33651a4.png#pic_center)
全局暂元:能长期存在内存中
sysuse nlsw88, clear
global xx "hours ttl_exp married union"
reg wage $xx // 全局暂元的引用方式
est store homo
reg wage $xx, robust
est store het
reg wage $xx i.occupation, robust
est store het_occu
利用暂元写循环语句
while循环:
local j = 0
while `j' |