[关闭]
@liuyuxi 2023-05-26T07:10:48.000000Z 字数 8873 阅读 30

stata笔记 整理

stata


1.处理省份、加标签

  1. rename prvcnm province
  2. egen pro_id=group(province)
  3. labmask pro_id,val(province)
  4. label list
  5. tab pro_id,gen(id)
  6. tab year,gen(year)
  7. encode province,gen(id_p)
  8. gen newvar=subinstr(prvcnm, "省", "", .)
  9. gen newvar1=subinstr(newvar, "市", "", .)
  10. gen newvar2=subinstr(newvar1, "自治区", "", .)
  11. gen newvar3=subinstr(newvar2, "回族", "", .)
  12. gen newvar4=subinstr(newvar3, "壮族", "", .)
  13. gen newvar5=subinstr(newvar4, "维吾尔", "", .)
  14. drop newvar-newvar4
  15. rename newvar5 province

2.

  1. gen year=yofd(date)
  2. format 时间 %td //将2002/1/1改为01jan2002形式的。
  3. gen month=month(时间)
  4. duplicates drop treat post ofdi_average if treat==1,force
  5. drop if regexm(province,"上海")|regexm(province,"福建")
  6. label list
  7. label drop id id_p
  8. tab D,missing
  9. destring _all,replace
  10. misstable sum //能看出0值的数据
  11. misstable sum Fict03
  12. count if wage<20000

3.

  1. sort pro_id year
  2. bysort pro_id : ipolate consumption year , gen(consumption1) epolate
  3. carryforward consumption, gen(consumption2)
  4. gen consumption3=0.5*(consumption1+consumption2)
  5. label var consumption1 "线性插补的consumption"
  6. label var consumption2 "直接沿用缺失前的consumption"
  7. label var consumption3 "consumption1与consumption2的均值"
  8. sum consumption consumption1 consumption2 consumption3

4.

  1. kdensity wage
  2. dpplot estimate
  3. xtline pc1,overlay

5.

  1. // 提取panelB中的P值与t值
  2. *查看自由度
  3. ret list //查询其他命令返回值
  4. eret list //可以查看估计命令返回值e(),查看保存其他返回值r():ret list
  5. di e(df_r) //只在回归后使用时有用
  6. di invttail(11,0.071/2) //双边p值求出t值为1.998386,接近2.00
  7. di 2*ttail(11,1.998386)
  8. di invttail(11,0.010/2) //查看panelB的t值,为3.1058065
  9. di 2*ttail(11,3.1058065) //验证后也为0.010
  10. mat list e(WCB_pvalue)
  11. local pval = e(WCB_pvalue)[1,1]
  12. mat PV = e(WCB_pvalue)
  13. mat PV1 = PV[1,1]
  14. local pval_abs = det(PV1)
  15. di `pval_abs'
  16. local tval = invttail(11,`pval_abs'/2)
  17. di `tval'
  18. mat list e(V)
  19. mat list e(b)
  20. mat b = J(500,1,0)

6.CSMAR

  1. *1.企业规模(资产总额)数据处理
  2. import delimited "D:\Master Thesis\data for pre\资产负债表161341164\FS_Combas.csv", encoding(utf8)
  3. nrow
  4. rename v1 symbol
  5. rename *, lower //将所有变量名批量改小写
  6. rename _all,lower
  7. recast str6 symbol, force //将strL改为str6,否则不可合并
  8. label var stkcd "[证券代码]-以上海交易所、深圳证券交易所公布的证券代码为准"
  9. label var accper "[会计期间]-YYYY-MM-DD,前四位表示会计报表公布年度"
  10. label var typrep "[报表类型]-指上市公司的财务报表中反映的是合并报表或者母公司报表。“A=合并报表”、“B=母公司报表”。"
  11. label var a001000000 "[资产总计]-资产各项目之总计。1990年起使用"
  12. *证券代码 数值型转为字符型
  13. tostring stkcd,replace
  14. replace stkcd=substr("000000",1,6-length(stkcd))+stkcd
  15. *只保留合并报表
  16. keep if typrep=="A"
  17. *只保留年末资产总额
  18. keep if strmatch(accper, "****-12-31")
  19. *给资产总额取对数
  20. gen lasset=log(a001000000+1)
  21. label var lasset "资产总额的对数"
  22. gen year=real(substr(accper,1,4))
  23. label var year "年份"

7.如何给CSMAR批量加标签

  1. *打开这个txt文件(文件名中含有“[DES]”),全选,复制,粘贴到stataData-editer里面
  2. replace var1 = subinstr(var1," - ","-",.)
  3. // subinstr为字符替换函数,相当于office里面的Ctrl+H
  4. replace var1 = subinstr(var1," ["," *[",.)
  5. split var1, p(*) gen(s)
  6. //以*为分隔点,将var1拆分出新变量s1,s2 ,…,sk+1(k为var1中*的个数)
  7. gen str20 s3 = " label var "
  8. replace s1 = lower(s1)
  9. //将变量名中所有字母转换为小写,如需转换为大写则将lower写为upper
  10. replace s2 = `"""' + s2 + `"""'
  11. gen a1 = " "
  12. gen a2 = a1
  13. order a1 s3 s1 s2 a2
  14. keep a1 s3 s1 s2 a2
  15. *最后将Data-editor窗口中的内容贴入Do-editor里面,然后框选刚刚贴到Do-editor中的命令,按住ctrl+d即可完成批量贴标签。
  16. 资料来源:https://bbs.pinggu.org/thread-4168490-1-1.html

7.21年的整理

  1. /*
  2. */
  3. // 一、从国泰安csv文件到stata数据集的初步处理
  4. // 0.导入数据
  5. import delimited "D:\downloads\*****.csv", encoding(utf8)
  6. compress //选择性操作(可做可不做),可压缩导入数据的占memory的内存,有助于提高运行速度
  7. rename *,lower //选择性操作(可做可不做),把所有变量名改为小写,将星号可改为特定变量名
  8. // 1.清理有问题的行
  9. /*1.1如果导入后symbol显示为字符型,可能symbol有缺失行,该行可能存在问题可删掉*/
  10. nmissing // 看各变量缺失值情况
  11. list symbol if symbol==""
  12. list symbol shortname enddate if symbol==""|shortname ==""|enddate ==""
  13. drop if symbol==""
  14. drop if symbol==""|shortname ==""|enddate ==""
  15. /*1.2也可利用代码和时间的步长来清除无效观测*/
  16. gen stkcd_length=strlen(stkcd)
  17. order stkcd stkcd_length
  18. drop if stkcd_length > 6
  19. gen accper_length=strlen(accper)
  20. drop if strlen(accper)>10
  21. drop if strlen(accper)<10
  22. drop if stkcd_length<6
  23. drop stkcd_length accper_length
  24. //2.将证券代码转为字符型
  25. /*将部分证券代码 数值型转为字符型*/
  26. tostring stkcd,replace
  27. replace stkcd=substr("000000",1,6-length(stkcd))+stkcd
  28. // 3.处理省份变量与年份变量
  29. /*3.1 省份。来自公司基本信息表的数据集记录了所属省份(provincename),可能需要排除省份变量有误的行*/
  30. tab province,missing
  31. list symbol year if province=="机械与设备租赁"|province=="提供上述产品的售后服务" //检查那些省份变量有问题的行列,在双引号内加入要排除的有关文字
  32. drop if strmatch(province,"开曼群岛") //在双引号内加入要排除的有关文字
  33. tab province,missing
  34. encode province,gen(id_p) //检查省份变量无误后,可对省份进行数值编码,以便后文进行合并(merge)
  35. label list //上一步加入了标签,此处可再确认一次
  36. /*3.2 年份。提取企业年份时间变量,以便后f进分析行合并(merge)*/
  37. gen year=real(substr(enddate,1,4))
  38. // 4.查看数据情况。
  39. des //描述数据集
  40. duplicates list //查看有无重复观测
  41. duplicates drop //删除重复观测
  42. // 5.给数据加标签并保存数据集
  43. label data "*****" //给数据加标签
  44. save *****文件名 //保存数据
  45. // 二、数据集合并
  46. // 1.先涉及到企业数据合并,可能需要使用merge。
  47. merge 1:1 symbol year using ******.dta
  48. keep if _merge==3 //保存两数据集都有的数据,_merge==2或1是单边有的,一般是保存都有的。
  49. drop _merge
  50. // 2.再涉及到企业与省份数据合并,先要给涉及到的省份变量数据集加数字编码,以便使用merge。
  51. use *****,clear //打开省份数据集
  52. tab province,missing //查看省份情况
  53. encode province,gen(id_p)
  54. label list //查看此时对各省的数值标签,注意要与企业数据集里的变量名与标签相一致
  55. save,replace //替换原省份数据集
  56. use *****,clear //打开企业数据集
  57. merge m:1 id_p year using *** //与省份数据集相合并
  58. list province year if _merge==2 // 查看省份数据中没有的
  59. drop if _merge==2
  60. keep if _merge==3 //最后执行这个
  61. drop _merge
  62. // 三、对EPS数据集的stata整理(EPS的excel往往是按照纵轴是各省与变量,横轴是时间,需要先转换成正常的纵轴按照变量和时间排列的情况)
  63. // 3.如果excel是按照纵轴省份、横轴时间排列的,可能需要使用reshape long与reshape short命令。
  64. replace 变量 = 变量[_n-1] if 变量=="" //每个变量只在本列第一行写了变量名,而以下各行均未注明时,可如此给以后加变量名
  65. drop if 地区=="" //以上操作进行完后,可以此删除空白行
  66. tab 变量
  67. reshape long value,i(变量 地区) j(year)
  68. reshape wide value,i(地区 year) j(变量) string
  69. rename value* *
  70. encode 地区,gen(id)
  71. import excel "D:\Master Thesis\data for pre\分省床位数_eps_中国国家统计局.xls", sheet("中国宏观经济数据库-年度(分省市)") firstrow clear
  72. rename A province
  73. reshape long hospital,i(province) j(year)
  74. // 四、查看数据情况。
  75. duplicates list //查看有无重复观测
  76. duplicates drop //删除重复观测
  77. des //描述数据集
  78. sum //简单描述性统计,xtset后也可看接近的xtsum
  79. // 五、可能会涉及到变量缺失值处理。
  80. // 5.1 查看缺失值
  81. mdesc //所有变量的缺失数量及缺失比例
  82. misstable sum //所有含缺失值变量的缺失数量,及这些变量的最大最小值。
  83. fmiss //所有变量的缺失数量(相对不如mdesc,约等于mdesc的精简版)
  84. nmissing //所有含缺失值变量的缺失数量(misstable sum的精简版)
  85. /*相对而言,nmissing最简洁,inspect信息最多但不好读,misstable sum恰好介于nmissing与
  86. inspect之间,兼具共同优点。mdesc、fmiss连未缺失的都给出了,不如前三个简单。*/
  87. // 5.2处理缺失值(摘自 《Stata数据处理:一文读懂微观数据库清理(上)》,连享会)
  88. // 第一个思路:通过统计值进行推断。为了消除极端值的影响,采用去掉极端值的均值数据对原有价格数据进行弥补。.........中位数和众数较少受极端值的影响,所以也可以直接采用价格中位数或众数对原有价格数据进行弥补。
  89. // 第二个思路:通过插值进行补漏。对于长时期数据,可以根据时间变量进行插值来对缺失值进行弥补。bysort vid:ipolate plantarea year, gen(temp_plantarea) epolate
  90. replace plantarea_new=temp_plantarea if plantarea_new==. & !missing(temp_plantarea)
  91. drop temp_plantarea
  92. sum plantarea_new plantarea //补漏后进行查验对比
  93. label var plantarea_new "种植面积(补漏后)"
  94. // 第三个思路:采用周围非缺失值来填补缺失值。
  95. /*采用上一年非缺失值进行弥补*/
  96. gen plantarea2=plantarea
  97. by vid :replace plantarea2=plantarea[_n-1] ///
  98. if missing(plantarea2) //其中两个缺失值的前一年取值也为缺失值
  99. sum plantarea2 plantarea //补漏后进行查验*采用上一年非缺失值进行弥补
  100. save "sale_data_reg", replace //完成数据清理,进行保存供分析所用
  101. // 此外,还可通过参考相似样本进行取值、多重补漏分析以及一些非参数方法进行补漏。有几类问题,即使存在缺失值也不应该对其进行弥补:一是具有主观性的问题,二是样本值的缺失是随机的,此时对数据进行缺失值的弥补反而会造成偏误。
  102. // 5.3 缺失值处理其他命令(carryforward与fillmissing)
  103. sort id year //注意先按照个体时间进行排序
  104. bys id :carryforward //能够以数据中的非空前值来填充缺失值。
  105. carryforward x,gen(x1) cfindic(x2)
  106. /*上述程序表示对x列的缺失值进行填充,原则为将缺失值前一行的非空数值作为填充值填入,并生成新
  107. 的一列变量x1来显示已填充好的数值。同时生成一个新的0,1变量x2,当该变量为0时,则表示其对应的
  108. 是原始数据;而当其为1时,表示对应的是填充的数据。*/
  109. bysort id: fillmissing x,with(linear) /
  110. *能正常地线性补入补上组内非首尾缺失的缺失数据,对于组内首尾缺失则分别默认使用with(next)和with(previous)选项替换*/

8.用stack命令整理数据

  1. import excel "D:\Master Thesis\data for pre\市场中介组织的发育和法律制度环境指数_97_18.xlsx", sheet("Sheet1")
  2. foreach i of varlist A - X {
  3. replace `i' =subinstr(`i',"year","",.)
  4. }
  5. sxpose2,clear force
  6. nrow
  7. ds
  8. di r(varlist)
  9. // 北京 天津 河北 山西 内蒙古 辽宁 吉林 黑龙江 上海 江苏 浙江 安徽 福建 江西 山东 河南 湖北 湖南 广东 广西 海南 重庆 四川 贵州 云南 西藏 陕西 甘肃 青海 宁夏 新疆
  10. stack 北京 天津 河北 山西 内蒙古 辽宁 吉林 黑龙江 上海 江苏 浙江 安徽 福建 江西 山东 河南 湖北 湖南 广东 广西 海南 重庆 四川 贵州 云南 西藏 陕西 甘肃 青海 宁夏 新疆 , into(transport_num) clear
  11. rename _stack province
  12. egen id=group(province)
  13. bys id:gen year=_n
  14. replace year = 1997 if year == 1
  15. replace year = 1998 if year == 2
  16. replace year = 1999 if year == 3
  17. replace year = 2000 if year == 4
  18. replace year = 2001 if year == 5
  19. replace year = 2002 if year == 6
  20. replace year = 2003 if year == 7
  21. replace year = 2004 if year == 8
  22. replace year = 2005 if year == 9
  23. replace year = 2006 if year == 10
  24. replace year = 2007 if year == 11
  25. replace year = 2008 if year == 12
  26. replace year = 2009 if year == 13
  27. replace year = 2010 if year == 14
  28. replace year = 2011 if year == 15
  29. replace year = 2012 if year == 16
  30. replace year = 2013 if year == 17
  31. replace year = 2014 if year == 18
  32. replace year = 2015 if year == 19
  33. replace year = 2016 if year == 20
  34. replace year = 2017 if year == 21
  35. replace year = 2018 if year == 22
  36. replace year = 2019 if year == 23
  37. tostring province,replace
  38. replace province = "北京" if province == "1"
  39. replace province = "天津" if province == "2"
  40. replace province = "河北" if province == "3"
  41. replace province = "山西" if province == "4"
  42. replace province = "内蒙古" if province == "5"
  43. replace province = "辽宁" if province == "6"
  44. replace province = "吉林" if province == "7"
  45. replace province = "黑龙江" if province == "8"
  46. replace province = "上海" if province == "9"
  47. replace province = "江苏" if province == "10"
  48. replace province = "浙江" if province == "11"
  49. replace province = "安徽" if province == "12"
  50. replace province = "福建" if province == "13"
  51. replace province = "江西" if province == "14"
  52. replace province = "山东" if province == "15"
  53. replace province = "河南" if province == "16"
  54. replace province = "湖北" if province == "17"
  55. replace province = "湖南" if province == "18"
  56. replace province = "广东" if province == "19"
  57. replace province = "广西" if province == "20"
  58. replace province = "海南" if province == "21"
  59. replace province = "重庆" if province == "22"
  60. replace province = "四川" if province == "23"
  61. replace province = "贵州" if province == "24"
  62. replace province = "云南" if province == "25"
  63. replace province = "西藏" if province == "26"
  64. replace province = "陕西" if province == "27"
  65. replace province = "甘肃" if province == "28"
  66. replace province = "青海" if province == "29"
  67. replace province = "宁夏" if province == "30"
  68. replace province = "新疆" if province == "31"
  69. labmask id, val(province)
  70. rename transport_num law_market

9.

  1. clear
  2. import excel "D:\Master Thesis\data for 1st\分城市FDI_CSMAR.xls", sheet("sheet1") firstrow
  3. cap labone, nrow(1 2) concat("_")
  4. drop in 1/2
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注