【STATA】批量定义变量的缺失值 foreach

0. 缘起

刚开始接触stata,用来做问卷结果的处理工作。但是某些问卷软件在针对缺失的空(也包括某些数据库中下载的数据)通常采用一些特定的数如-3或者-8作为缺失值,但是stata并不够聪明,不能识别其为缺失值(当时一直感叹,SPSS都能实现的功能堂堂stata居然不能)。

后来发现可以使用replace命令进行变量替换,但是苦于变量太多,一个一个写代码过于麻烦(最重要的是非常的丑!!)感觉非常的鸡肋。这个问题困扰我苦久,终于在某个机缘巧合之下知道了正确的处理方法。

顺便说一句,上篇文章中提到的针对所有的国家跑ARIMA模型,并输出结果也是用这种方法实现。其实会了过后知道就是简单的循环语句,但是原来不会的时候,就感觉非常的麻烦。

1. 实现代码

好了,不多bb,直接上代码吧!

代码非常的简短,分为两步

  1. 对所有的变量循环_all
  2. 将小于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进行分析。现在虽然在某些方面还是很难受(不过主要还是因为会的太少了)不过相比最开始的时候感觉好多了。

其实感觉最近收获还是蛮大的,连着好久都没有发文了,主要的原因是因为最近事情有点多,没有时间整理学到的东西然后码字。好几次想写点什么,后来都咕了,今天是突然有感草草的写了一点东西,等忙完过后再做分享叭。


版权声明:本文为qq_44773018原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。