Stata基础:数据显示格式和四舍五入

发布时间:2020-10-07 阅读 33

Stata 连享会   主页 || 视频 || 推文

温馨提示: 定期 清理浏览器缓存,可以获得最佳浏览体验。

课程主页 https://gitee.com/arlionn/Course

作者:连玉君 (中山大学)
E-Mail: arlionn@163.com

问题背景:

您好!我是一名 stata 的初学者,刚学习就感觉到 stata 强大无比。目前,我遇到了一个数值型变量的问题,特向您请教,非常感谢!

通过 insheet 导入 csv格式 的数据,对于不同的变量,csv 文件中保留有效位数并不完全一致。比如其中一个变量 x,保留了小数点后 3 位,但导入后就默认为浮点型了,进行数次条件删除后,筛选形成新的数据,但新数据与原数据在小数点位数不一致了。

我可以通过 format 或者 recast 将数据的显示格式修改为3 位,但其实际并不是 3 位。这导致我的条件判断语句无法正常执行。比如:我需要判断以上这个 x 变量大于 0.002 的个数,由于导入数据过程中,把 0.002 的值自动变成了0.0020000000949949 (大于 0.002)。我的分类条件语句(x <= 0.002 为一类,而 x > 0.002 为另一类)就会产生错误判断。

想请教老师,怎么才能让这个变量在导入 stata 后与原数据保持一致呢?或者说怎么操作才能将结果正确地分类呢?

回答:

  1. 你在 csv 文件或 Excel 文件中看到的数据格式,比如 0.002 并不是这个观察值的真实面目,你看到的可能只是其化妆后的摸样 —— 显示格式。大家在 Excel 中,经常选中一列数据,然后 「右击 → 设定单元格格式」,这其实都是在设定变量的显示格式。其真实数值可能是 0.0020000000949949
  2. 当你使用 insheetimport excel 等命令把 Excel 数据文档导入 Stata 时,导入的是其真实数值(0.0020000000949949),而不是 0.002
  3. 因此,你可以再导入前,把 Excel 中的观察值粘贴到一个文本文件中,看看其真实面目。也可以再导入 Stata 以后进行二次处理。比如,使用 round() 函数进行四舍五入。
  4. 不过,多数情况下应该都没有问题。在你的问题中,你是预先设定了分组 界点 (cut-point) = 0.002,才会引发上述问题。

Stata 实例:

录入数据

clear
input x1
0.0020000000949949
0.0019000000949949
0.0031000000949949
end

产生一个新变量,取值为 x1 的四舍五入,小数点后取 3 位有效数字

gen x2 = round(x1,0.001) //四舍五入
  • 测试 1: 将二者的显示格式设定为小数点后 3 位有效数字
format x1 x2 %4.3f
list x1 x2  //显示效果相同!它们真的一样吗?
  • 测试 2: 将二者的显示格式设定为小数点后 16 位有效数字
format x1 x2 %18.16f
list x1 x2  //此时可以看出二者的差别了

启示: 在使用 条件判断语句 时要非常小心!

. gen str12 Yes1 = "==0.002" if x1==0.002
. replace   Yes1 = "!=0.002" if x1!=0.002

. gen str12 Yes2 = "==0.002" if x2==0.002
. replace   Yes2 = "!=0.002" if x2!=0.002

. order x1 Yes1 x2 Yes2

. list, noobs clean

  +-------------------------------------------------------------+
  |                 x1      Yes1                   x2      Yes2 |
  |-------------------------------------------------------------|
  | 0.0020000000949949   !=0.002   0.0020000000000000   ==0.002 |
  | 0.0019000000949949   !=0.002   0.0020000000000000   ==0.002 |
  | 0.0031000000949949   !=0.002   0.0030000000000000   !=0.002 |
  +-------------------------------------------------------------+

附:完整 Do-file

* 录入数据
clear
input x1
0.0020000000949949
0.0019000000949949
0.0031000000949949
end

* 产生一个新变量,取值为 x1 的四舍五入,`小数点后取 3 位有效数字`
gen x2 = round(x1,0.001) //四舍五入

* 测试1:将二者的显示格式设定为小数点后 `3 位有效数字`
format x1 x2 %4.3f
list x1 x2  //显示效果相同!它们真的一样吗?

* 测试2:将二者的显示格式设定为小数点后 `16 位有效数字`
format x1 x2 %18.16f
list x1 x2  //此时可以看出二者的差别了

* 启示: 在使用`条件判断语句`时要非常小心!
gen str12 Yes1 = "==0.002" if x1==0.002
replace   Yes1 = "!=0.002" if x1!=0.002

gen str12 Yes2 = "==0.002" if x2==0.002
replace   Yes2 = "!=0.002" if x2!=0.002

order x1 Yes1 x2 Yes2

list, noobs clean

相关课程

连享会-直播课 上线了!
http://lianxh.duanshu.com

免费公开课:


课程一览

支持回看,所有课程可以随时购买观看。

专题 嘉宾 直播/回看视频
最新专题 DSGE, 因果推断, 空间计量等
Stata数据清洗 游万海 直播, 2 小时,已上线
研究设计 连玉君 我的特斯拉-实证研究设计-幻灯片-
面板模型 连玉君 动态面板模型-幻灯片-
面板模型 连玉君 直击面板数据模型 [免费公开课,2小时]

Note: 部分课程的资料,PPT 等可以前往 连享会-直播课 主页查看,下载。


关于我们

  • Stata连享会 由中山大学连玉君老师团队创办,定期分享实证分析经验。直播间 有很多视频课程,可以随时观看。
  • 连享会-主页知乎专栏,300+ 推文,实证分析不再抓狂。
  • 公众号推文分类: 计量专题 | 分类推文 | 资源工具。推文分成 内生性 | 空间计量 | 时序面板 | 结果输出 | 交乘调节 五类,主流方法介绍一目了然:DID, RDD, IV, GMM, FE, Probit 等。
  • 公众号关键词搜索/回复 功能已经上线。大家可以在公众号左下角点击键盘图标,输入简要关键词,以便快速呈现历史推文,获取工具软件和数据下载。常见关键词:课程, 直播, 视频, 客服, 模型设定, 研究设计, stata, plus, 绘图, 编程, 面板, 论文重现, 可视化, RDD, DID, PSM, 合成控制法

连享会主页  lianxh.cn
连享会主页 lianxh.cn

连享会小程序:扫一扫,看推文,看视频……

扫码加入连享会微信群,提问交流更方便

✏ 连享会学习群-常见问题解答汇总:
https://gitee.com/arlionn/WD