循环语句:
set more off
local i=1995
while `i'<=2013{
use `i',clear
destring province,replace force
save,replace
local i=`i'+1
}
循环语句:
forvalues i=1(1)18{
gen asset_l`i'=L`i'.asset
gen asset_real_l`i'=L`i'.asset_real
}
提取含有某字段的观测值:genapprovelevel=1 if strmatch(approving, "*国家*")
提取部分字段:gen month=substr(date,1,2)
生成2位数行业时不能直接用:genhy=real(substr(string(ind),1,2))
因为610等行业是三位数,需要用如下命令组合:
gen x=1 if ind<1000
gen ind2=ind
tostring ind2,replace force
replace ind2="0"+ind2 if x==1
gen hy=real(substr(ind2,1,2))
drop x ind2
label var hy 两位数行业代码
分类回归:statsby_b _se, by(register_3) saving(GMM_register_3,replace): ivregress gmm lnRVAwlnLw ( lnKw= lnKw_l1 ),vce(robust )
合并文档:joinbyind using tmp_OP 相当于merge
导出结果:logout,save(m2)excel replace: bysort year: sum lnRVAw lnLw lnKw age export_Realw
暂时保存和恢复:preserve restore
字符型转化成数值型:destringx,replace force(非数字的字符型全变成缺失值了);encoding x,gen(x1) (非数字的字符型也能完好保存)
生成虚拟变量:
tab hy,gen(DVhy)
gen time=(year>=2009)
gen treat=(register_6==1)
用stata15打开stata13文件时中文转码:
unicode encoding set GB18030
unicode translate FT2010.dta
一阶差分:gendDomar = D.Domar
滞后期:genDomarL1=L.Domar。算滞后期不能用Domar[_n-1],应该用L.Domar,不能用gen mid_Domar=(Domar+L.Domar)/2,应该先求出gen DomarL=L.Domar,再用gen mid_Domar=(Domar+ DomarL)/2。使用之前得先sort
向前一期用:genDomarF1=F.Domar
进行行业分类匹配时,注意“换回”问题
选取部分变量分析时,一定记得生成唯一识别变量,gen n=_n,以便重新取变量
查重复值的命令: egenx=tag(id),count if x=0
查重复值的命令:quietlybysort province ind:gen x=cond(_N==1,0,_n),count if x>1
查重复值的命令:byprovince ind:gen x=_n,count if x>1
查分布和缺失值的命令:codebook ind。将字符型转化成数值型的一个好处是方便查看分布。
查分布的命令:tab ind
对变量进行调整之后,一定要保留原始变量:id_origin ind_origin
提取部分字段:genhy=real(substr(string(ind),1,2))
导出结果的命令:logout,save(codebook`i')excel replace: codebook distr city ind register
*缺失值不参与求平均 mean()
按列求平均:egenfirmIOratio=rowmean( firm2000 firm2001 firm2002 firm2003 firm2005 firm2006 firm2007 )
将每年含字母的id统一修改成自然数,因为字符型id不能xtset
08-13 年没有input,但有inputprice,如果直接用va_Real=gv_c/outputprice+vadtax/outputprice-input/inputprice计算的话,系统会将inputprice当成input计算,系统不会自动报错。