@liuyuxi
2023-05-26T07:10:48.000000Z
字数 8873
阅读 134
stata
rename prvcnm provinceegen pro_id=group(province)labmask pro_id,val(province)label listtab pro_id,gen(id)tab year,gen(year)encode province,gen(id_p)gen newvar=subinstr(prvcnm, "省", "", .)gen newvar1=subinstr(newvar, "市", "", .)gen newvar2=subinstr(newvar1, "自治区", "", .)gen newvar3=subinstr(newvar2, "回族", "", .)gen newvar4=subinstr(newvar3, "壮族", "", .)gen newvar5=subinstr(newvar4, "维吾尔", "", .)drop newvar-newvar4rename newvar5 province
gen year=yofd(date)format 时间 %td //将2002/1/1改为01jan2002形式的。gen month=month(时间)duplicates drop treat post ofdi_average if treat==1,forcedrop if regexm(province,"上海")|regexm(province,"福建")label listlabel drop id id_ptab D,missingdestring _all,replacemisstable sum //能看出0值的数据misstable sum Fict03count if wage<20000
sort pro_id yearbysort pro_id : ipolate consumption year , gen(consumption1) epolatecarryforward consumption, gen(consumption2)gen consumption3=0.5*(consumption1+consumption2)label var consumption1 "线性插补的consumption"label var consumption2 "直接沿用缺失前的consumption"label var consumption3 "consumption1与consumption2的均值"sum consumption consumption1 consumption2 consumption3
kdensity wagedpplot estimatextline pc1,overlay
// 提取panelB中的P值与t值*查看自由度ret list //查询其他命令返回值eret list //可以查看估计命令返回值e(),查看保存其他返回值r():ret listdi e(df_r) //只在回归后使用时有用di invttail(11,0.071/2) //双边p值求出t值为1.998386,接近2.00di 2*ttail(11,1.998386)di invttail(11,0.010/2) //查看panelB的t值,为3.1058065di 2*ttail(11,3.1058065) //验证后也为0.010mat list e(WCB_pvalue)local pval = e(WCB_pvalue)[1,1]mat PV = e(WCB_pvalue)mat PV1 = PV[1,1]local pval_abs = det(PV1)di `pval_abs'local tval = invttail(11,`pval_abs'/2)di `tval'mat list e(V)mat list e(b)mat b = J(500,1,0)
*1.企业规模(资产总额)数据处理import delimited "D:\Master Thesis\data for pre\资产负债表161341164\FS_Combas.csv", encoding(utf8)nrowrename v1 symbolrename *, lower //将所有变量名批量改小写rename _all,lowerrecast str6 symbol, force //将strL改为str6,否则不可合并label var stkcd "[证券代码]-以上海交易所、深圳证券交易所公布的证券代码为准"label var accper "[会计期间]-YYYY-MM-DD,前四位表示会计报表公布年度"label var typrep "[报表类型]-指上市公司的财务报表中反映的是合并报表或者母公司报表。“A=合并报表”、“B=母公司报表”。"label var a001000000 "[资产总计]-资产各项目之总计。1990年起使用"*证券代码 数值型转为字符型tostring stkcd,replacereplace stkcd=substr("000000",1,6-length(stkcd))+stkcd*只保留合并报表keep if typrep=="A"*只保留年末资产总额keep if strmatch(accper, "****-12-31")*给资产总额取对数gen lasset=log(a001000000+1)label var lasset "资产总额的对数"gen year=real(substr(accper,1,4))label var year "年份"
*打开这个txt文件(文件名中含有“[DES]”),全选,复制,粘贴到stata的Data-editer里面replace var1 = subinstr(var1," - ","-",.)// subinstr为字符替换函数,相当于office里面的Ctrl+Hreplace var1 = subinstr(var1," ["," *[",.)split var1, p(*) gen(s)//以*为分隔点,将var1拆分出新变量s1,s2 ,…,sk+1(k为var1中*的个数)gen str20 s3 = " label var "replace s1 = lower(s1)//将变量名中所有字母转换为小写,如需转换为大写则将lower写为upperreplace s2 = `"""' + s2 + `"""'gen a1 = " "gen a2 = a1order a1 s3 s1 s2 a2keep a1 s3 s1 s2 a2*最后将Data-editor窗口中的内容贴入Do-editor里面,然后框选刚刚贴到Do-editor中的命令,按住ctrl+d即可完成批量贴标签。资料来源:https://bbs.pinggu.org/thread-4168490-1-1.html
/**/// 一、从国泰安csv文件到stata数据集的初步处理// 0.导入数据import delimited "D:\downloads\*****.csv", encoding(utf8)compress //选择性操作(可做可不做),可压缩导入数据的占memory的内存,有助于提高运行速度rename *,lower //选择性操作(可做可不做),把所有变量名改为小写,将星号可改为特定变量名// 1.清理有问题的行/*1.1如果导入后symbol显示为字符型,可能symbol有缺失行,该行可能存在问题可删掉*/nmissing // 看各变量缺失值情况list symbol if symbol==""list symbol shortname enddate if symbol==""|shortname ==""|enddate ==""drop if symbol==""drop if symbol==""|shortname ==""|enddate ==""/*1.2也可利用代码和时间的步长来清除无效观测*/gen stkcd_length=strlen(stkcd)order stkcd stkcd_lengthdrop if stkcd_length > 6gen accper_length=strlen(accper)drop if strlen(accper)>10drop if strlen(accper)<10drop if stkcd_length<6drop stkcd_length accper_length//2.将证券代码转为字符型/*将部分证券代码 数值型转为字符型*/tostring stkcd,replacereplace stkcd=substr("000000",1,6-length(stkcd))+stkcd// 3.处理省份变量与年份变量/*3.1 省份。来自公司基本信息表的数据集记录了所属省份(provincename),可能需要排除省份变量有误的行*/tab province,missinglist symbol year if province=="机械与设备租赁"|province=="提供上述产品的售后服务" //检查那些省份变量有问题的行列,在双引号内加入要排除的有关文字drop if strmatch(province,"开曼群岛") //在双引号内加入要排除的有关文字tab province,missingencode province,gen(id_p) //检查省份变量无误后,可对省份进行数值编码,以便后文进行合并(merge)label list //上一步加入了标签,此处可再确认一次/*3.2 年份。提取企业年份时间变量,以便后f进分析行合并(merge)*/gen year=real(substr(enddate,1,4))// 4.查看数据情况。des //描述数据集duplicates list //查看有无重复观测duplicates drop //删除重复观测// 5.给数据加标签并保存数据集label data "*****" //给数据加标签save *****文件名 //保存数据// 二、数据集合并// 1.先涉及到企业数据合并,可能需要使用merge。merge 1:1 symbol year using ******.dtakeep if _merge==3 //保存两数据集都有的数据,_merge==2或1是单边有的,一般是保存都有的。drop _merge// 2.再涉及到企业与省份数据合并,先要给涉及到的省份变量数据集加数字编码,以便使用merge。use *****,clear //打开省份数据集tab province,missing //查看省份情况encode province,gen(id_p)label list //查看此时对各省的数值标签,注意要与企业数据集里的变量名与标签相一致save,replace //替换原省份数据集use *****,clear //打开企业数据集merge m:1 id_p year using *** //与省份数据集相合并list province year if _merge==2 // 查看省份数据中没有的drop if _merge==2keep if _merge==3 //最后执行这个drop _merge// 三、对EPS数据集的stata整理(EPS的excel往往是按照纵轴是各省与变量,横轴是时间,需要先转换成正常的纵轴按照变量和时间排列的情况)// 3.如果excel是按照纵轴省份、横轴时间排列的,可能需要使用reshape long与reshape short命令。replace 变量 = 变量[_n-1] if 变量=="" //每个变量只在本列第一行写了变量名,而以下各行均未注明时,可如此给以后加变量名drop if 地区=="" //以上操作进行完后,可以此删除空白行tab 变量reshape long value,i(变量 地区) j(year)reshape wide value,i(地区 year) j(变量) stringrename value* *encode 地区,gen(id)import excel "D:\Master Thesis\data for pre\分省床位数_eps_中国国家统计局.xls", sheet("中国宏观经济数据库-年度(分省市)") firstrow clearrename A provincereshape long hospital,i(province) j(year)// 四、查看数据情况。duplicates list //查看有无重复观测duplicates drop //删除重复观测des //描述数据集sum //简单描述性统计,xtset后也可看接近的xtsum// 五、可能会涉及到变量缺失值处理。// 5.1 查看缺失值mdesc //所有变量的缺失数量及缺失比例misstable sum //所有含缺失值变量的缺失数量,及这些变量的最大最小值。fmiss //所有变量的缺失数量(相对不如mdesc,约等于mdesc的精简版)nmissing //所有含缺失值变量的缺失数量(misstable sum的精简版)/*相对而言,nmissing最简洁,inspect信息最多但不好读,misstable sum恰好介于nmissing与inspect之间,兼具共同优点。mdesc、fmiss连未缺失的都给出了,不如前三个简单。*/// 5.2处理缺失值(摘自 《Stata数据处理:一文读懂微观数据库清理(上)》,连享会)// 第一个思路:通过统计值进行推断。为了消除极端值的影响,采用去掉极端值的均值数据对原有价格数据进行弥补。.........中位数和众数较少受极端值的影响,所以也可以直接采用价格中位数或众数对原有价格数据进行弥补。// 第二个思路:通过插值进行补漏。对于长时期数据,可以根据时间变量进行插值来对缺失值进行弥补。bysort vid:ipolate plantarea year, gen(temp_plantarea) epolatereplace plantarea_new=temp_plantarea if plantarea_new==. & !missing(temp_plantarea)drop temp_plantareasum plantarea_new plantarea //补漏后进行查验对比label var plantarea_new "种植面积(补漏后)"// 第三个思路:采用周围非缺失值来填补缺失值。/*采用上一年非缺失值进行弥补*/gen plantarea2=plantareaby vid :replace plantarea2=plantarea[_n-1] ///if missing(plantarea2) //其中两个缺失值的前一年取值也为缺失值sum plantarea2 plantarea //补漏后进行查验*采用上一年非缺失值进行弥补save "sale_data_reg", replace //完成数据清理,进行保存供分析所用// 此外,还可通过参考相似样本进行取值、多重补漏分析以及一些非参数方法进行补漏。有几类问题,即使存在缺失值也不应该对其进行弥补:一是具有主观性的问题,二是样本值的缺失是随机的,此时对数据进行缺失值的弥补反而会造成偏误。// 5.3 缺失值处理其他命令(carryforward与fillmissing)sort id year //注意先按照个体时间进行排序bys id :carryforward //能够以数据中的非空前值来填充缺失值。carryforward x,gen(x1) cfindic(x2)/*上述程序表示对x列的缺失值进行填充,原则为将缺失值前一行的非空数值作为填充值填入,并生成新的一列变量x1来显示已填充好的数值。同时生成一个新的0,1变量x2,当该变量为0时,则表示其对应的是原始数据;而当其为1时,表示对应的是填充的数据。*/bysort id: fillmissing x,with(linear) /*能正常地线性补入补上组内非首尾缺失的缺失数据,对于组内首尾缺失则分别默认使用with(next)和with(previous)选项替换*/
8.用stack命令整理数据
import excel "D:\Master Thesis\data for pre\市场中介组织的发育和法律制度环境指数_97_18.xlsx", sheet("Sheet1")foreach i of varlist A - X {replace `i' =subinstr(`i',"year","",.)}sxpose2,clear forcenrowdsdi r(varlist)// 北京 天津 河北 山西 内蒙古 辽宁 吉林 黑龙江 上海 江苏 浙江 安徽 福建 江西 山东 河南 湖北 湖南 广东 广西 海南 重庆 四川 贵州 云南 西藏 陕西 甘肃 青海 宁夏 新疆stack 北京 天津 河北 山西 内蒙古 辽宁 吉林 黑龙江 上海 江苏 浙江 安徽 福建 江西 山东 河南 湖北 湖南 广东 广西 海南 重庆 四川 贵州 云南 西藏 陕西 甘肃 青海 宁夏 新疆 , into(transport_num) clearrename _stack provinceegen id=group(province)bys id:gen year=_nreplace year = 1997 if year == 1replace year = 1998 if year == 2replace year = 1999 if year == 3replace year = 2000 if year == 4replace year = 2001 if year == 5replace year = 2002 if year == 6replace year = 2003 if year == 7replace year = 2004 if year == 8replace year = 2005 if year == 9replace year = 2006 if year == 10replace year = 2007 if year == 11replace year = 2008 if year == 12replace year = 2009 if year == 13replace year = 2010 if year == 14replace year = 2011 if year == 15replace year = 2012 if year == 16replace year = 2013 if year == 17replace year = 2014 if year == 18replace year = 2015 if year == 19replace year = 2016 if year == 20replace year = 2017 if year == 21replace year = 2018 if year == 22replace year = 2019 if year == 23tostring province,replacereplace province = "北京" if province == "1"replace province = "天津" if province == "2"replace province = "河北" if province == "3"replace province = "山西" if province == "4"replace province = "内蒙古" if province == "5"replace province = "辽宁" if province == "6"replace province = "吉林" if province == "7"replace province = "黑龙江" if province == "8"replace province = "上海" if province == "9"replace province = "江苏" if province == "10"replace province = "浙江" if province == "11"replace province = "安徽" if province == "12"replace province = "福建" if province == "13"replace province = "江西" if province == "14"replace province = "山东" if province == "15"replace province = "河南" if province == "16"replace province = "湖北" if province == "17"replace province = "湖南" if province == "18"replace province = "广东" if province == "19"replace province = "广西" if province == "20"replace province = "海南" if province == "21"replace province = "重庆" if province == "22"replace province = "四川" if province == "23"replace province = "贵州" if province == "24"replace province = "云南" if province == "25"replace province = "西藏" if province == "26"replace province = "陕西" if province == "27"replace province = "甘肃" if province == "28"replace province = "青海" if province == "29"replace province = "宁夏" if province == "30"replace province = "新疆" if province == "31"labmask id, val(province)rename transport_num law_market
clearimport excel "D:\Master Thesis\data for 1st\分城市FDI_CSMAR.xls", sheet("sheet1") firstrowcap labone, nrow(1 2) concat("_")drop in 1/2