0. 缘起
刚开始接触stata
,用来做问卷结果的处理工作。但是某些问卷软件在针对缺失的空(也包括某些数据库中下载的数据)通常采用一些特定的数如-3
或者-8
作为缺失值,但是stata
并不够聪明,不能识别其为缺失值(当时一直感叹,SPSS
都能实现的功能堂堂stata
居然不能)。
后来发现可以使用replace
命令进行变量替换,但是苦于变量太多,一个一个写代码过于麻烦(最重要的是非常的丑!!)感觉非常的鸡肋。这个问题困扰我苦久,终于在某个机缘巧合之下知道了正确的处理方法。
顺便说一句,上篇文章中提到的针对所有的国家跑ARIMA
模型,并输出结果也是用这种方法实现。其实会了过后知道就是简单的循环语句,但是原来不会的时候,就感觉非常的麻烦。
1. 实现代码
好了,不多bb,直接上代码吧!
代码非常的简短,分为两步
- 对所有的变量循环
_all
- 将小于
0
的数替换为缺失值
foreach v of varlist _all{ //针对所有变量
replace `v' = . if `v' < 0 //将负数替换为缺失值
}
这里的v
相当于正常循环中的i
,不过在表示变量的时候需要用“ `’ ”将其给框起来。
可以根据具体的情况设计逻辑语句,只需替换
if
后边的逻辑语句即可
再加一些碎碎念,是针对于某些变量设置缺失值,而不是针对所有变量。具体的代码如下:
local vars " daily dress" //选择需要循环的变量
foreach v of local vars{
replace `v' = . if `v' < 0 //将负数替换为缺失值
}
和上述的思路基本上是一样的,唯一的区别就是定义了一个变量名的变量(暂元)vars
,然后对vars
中的所有的东西进行循环。
2. 一些碎碎念
自从知道了这个之后,才感觉stata
刚刚入了门,因为如果不会循环的话,用stata
做数据处理简直就是一种非人的折磨。甚至一度我都是先把数据导入matlab
进行处理,再导出,最后再导入stata
进行分析。现在虽然在某些方面还是很难受(不过主要还是因为会的太少了)不过相比最开始的时候感觉好多了。
其实感觉最近收获还是蛮大的,连着好久都没有发文了,主要的原因是因为最近事情有点多,没有时间整理学到的东西然后码字。好几次想写点什么,后来都咕了,今天是突然有感草草的写了一点东西,等忙完过后再做分享叭。