软件应用 | Stata中的小清新命令:添加观测值
The following article is from Stata and Python数据分析 Author 爬虫俱乐部
本文转载自公众号Stata and Python数据分析
导读
长期使用Stata的用户都知道Stata所包含的命令众多、功能各异,有时一个命令有很多option
,用以满足用户的不同需求。那有没有一些一看就懂,一用就会的简单命令呢,今天就给大家介绍四个在数据集中添加观测值的小命令,包括生成观测值的obs
命令、在数据集中添加或插入观测值的insobs
命令、在数据集末尾添加更多观测值的moresobs
命令、用n倍的观测值去替换数据集中观测值的expand
命令。这几个命令的功能是有一些相似的,但是也有不同之处,大家了解之后就可以根据需要选择合适的命令~
Part1obs
对于obs
,大家肯定都非常了解了。set obs
可以改变当前数据集的观测值个数。语法也十分简单:
set obs #
#
就表示想要生成的观测值的个数,需要注意的是设置的观测值个数必须大于等于当前数据集中的观测值数量。如果数据集中已经包含变量值,设置的新观测值的多余部分则被记为缺失值。
大家可以根据下边的程序再次感受一下obs
的功能:
clear all
set obs 10 //生成10个观测值
gen x = _n //创建变量x (x=1, 2 ,3·········10)
gen y = x^2 //创建变量y (y=1,4,9……………100)
set obs 15
程序运行结果分别如图中所示:
Part2insobs
insobs
命令的功能是添加或者插入观测值。如果不添加选项,直接使用insobs obs则表示在数据集末尾添加观测值。obs
则表示想要添加或者插入的观测值的数量。
insobs obs
如果是想要在数据集指定位置之前或之后插入观测值,就可以结合 before(inspos)
和 after(inspos)
选项使用,语法如下:
insobs obs, before(inspos) | after(inspos)
举个例子吧~ 首先,如果是一个空数据集,这时使用insobs
命令可以直接生成观测值,此时insobs 10
和set obs 10
的效果是一样的:
clear all
insobs 10 //生成10个观测值
gen x = _n //生成数值
如果数据集中已经存在数据,此时再执行insobs 5
,则表示在数据集末尾添加五行观测值,且全部为缺失值。
insobs 5 //在数据集末尾插入观测值
如果在生成10个观测值后,我们想要在这10个观测值中间插入观测值呢?这时就可以使用刚刚提到的before(inspos)
和after(inspos)
选项,使用方法如下:
clear all
set obs 10 //生成10个观测值
gen x = _n //创建变量x (x=1, 2 ,3·········10)
insobs 3, after(5) //在第五个观测值之后增加3行新的观测值
Part3moreobs
我们知道obs
是观测值(observations)的意思,那么顾名思义,moreobs
就是在数据集末尾添加更多观测值。moreobs
命令的语法如下所示:
moreobs #
如果不指定#
的值,则默认为1,而且moreobs
命令生成的观测值也是缺失值。
话不多说,直接上案例:
clear all
set obs 10 //生成10个观测值
gen x = _n //创建变量x (x=1, 2 ,3·········10)
gen y = x^2 //创建变量y (y=1,4,9……………100)
moreobs 1 //在数据集末尾添加一个观测值,相当于moreobs
那么如果想在数据集末尾添加5行观测值,只需将#
改成5即可:
clear all
set obs 10 // 生成10个观测值
gen x = _n // 创建变量x (x=1, 2 ,3·········10)
gen y = x^2 // 创建变量y (y=1,4,9……………100)
moreobs 5 // 在数据集末尾添加五行观测值
Part4expand
expand
命令的功能是用n倍数量的观测值去替换当前数据集中的观测值,其中 n
等于用户给出的数值表达式四舍五入后最接近的整数,如果小于1或等于缺失值 ,则将其解释为1,不进行原数据的复制。expand
命令的具体语法如下:
expand [=]exp [if] [in] [, generate(newvar)]
其中if
和in
可以为expand
添加条件和选择范围,generate(newvar)
选项可生成新变量newvar
,用于标记原始数据(newvar
等于0)和复制数据(newvar
等于1)。这样的话,若要还原原始数据,则只需要通过保留newvar
等于0的数据来实现,即keep if newvar==0
。
接下来通过一个例子来看一下expand
命令的使用效果:
webuse stackxmpl, clear //调入数据stackxmpl
list //显示数据
将原始数据复制1份添加在当前数据集中,即用2倍的原始数据替换当前数据,程序如下:
expand 2
list
expand
还可以根据指定变量的数值进行替换数据,对于stackxmpl
这个数据集,expand b
就表示根据变量b的值对数据进行扩充,这里变量b第一、第二行观测值分别为2和6,因此expand b
就将当前数据集替换为有两行第一行观测值和六行第二行观测值,即添加了原始数据第一行观测值的1倍和第二行观测值的5倍。
webuse stackxmpl, clear
list
expand b
list
通过上边的介绍,大家是不是了解了这几个命令的不同之处了呢~
星标⭐我们不迷路!想要文章及时到,文末“在看”少不了!
点击搜索你感兴趣的内容吧
往期推荐
数据Seminar
这里是大数据、分析技术与学术研究的三叉路口
推荐 | 青酱