本文作者:杨慧琳 文字编辑:杨长青 技术总编:司海涛 在数据处理中,我们可能需要将多个变量拼接为一个变量。这一操作可以通过replace或gen命令实现。但是,这种方法仅适用于字符型变量的拼接。当各个变量数据类型不同时,Stata将提示“type mismatch”的错误。 例如,当前路径下存在如下数据集: 使用describe命令查看各个变量类型,如下: 可知,变量company和make均为字符型,gear_ratio为浮点型,foreign为字节型,其余的为整值型。我们使用gen命令将变量company和make拼接在一起,公司名和人名用冒号隔开,执行程序与结果如下:
这样,两个字符型变量便拼接在一起了。 但在实际操作中,我们可能还需要拼接更多的变量,较为直接的处理思路是现将变量转换为字符型,其次逐一拼接。但这种方法较为繁琐,尤其是存在多个拼接变量且需添加分隔符时更加难以操作。那么,有没有什么命令可以实现变量快速拼接,并在各个变量间添加分隔符呢?我们介绍两种简单方法。 1、catenate命令 catenate命令可以将字符型或数值型变量拼接在一起,并生成一个新的字符型变量。在拼接过程中,可自动转化变量类型,并可定义变量拼接范围。其基本语法如下: catenate newvar = varlist [if exp] [in range] [,punct(punctchars) ] 其中,punct(punctchars)选项用于定义拼接变量间的分隔符,默认以空格分隔。当然,也可使用punct(no)选项,表示不使用分隔符。 在本例中,我们尝试将数据集中前5行的所有变量进行拼接,并以逗号分隔。执行程序与结果如下:
2、concat()函数 concat()函数是egen命令自带的一个函数,也可以实现不同类型变量的拼接。其基本语法如下: concat(varlist) [, format(%fmt) decode maxlength(#)punct(pchars)] 其中,format(%fmt)选项可用于定义数值型变量在拼接后的显示样式;decode选择可进行解码;maxlength()选项用于定义变量标签最大长度。在默认情况下,各个变量紧密连接,中间不存在空格等符号。 在本例中,我们依然将所有变量进行拼接,并设置数值型变量的显示样式为%5.3f,变量之间以分号分隔。执行程序与运行结果如下:
通过以上两种方法,我们便实现了变量的快速拼接。尤其是当变量名具有一定规律性,如v1、v2、v3…时,采用以上方法将更加高效,仅需执行“catenate v = v*, p(,)” 或“egen v =concat(v*), p(,)”即可,极大简化了数据处理程序。 |
|