查看原文
其他

首行数据如何快速转变量名?

爬虫俱乐部 Stata and Python数据分析 2022-03-15

本文作者:俞诗琪

文字编辑:张馨月

技术总编:张计宝

导读


在日常工作中,我们导入的数据常常不那么规范,如下图所示,原本的变量名处在变量值的位置,若要重新提取变量名,单个变量依次重命名显然繁琐,那么我们有什么快捷的方法呢?

在之前的推文《小命令大用途之——labone和nrow》中,我们使用命令nrow解决了这一问题,今天我们学习的命令convert_top_lines可以实现类似的功能。使用这一命令,不仅可以通过一行代码解决上述问题,而且可读入存于变量值中的变量标签。下面我们就一起来了解convert_top_lines命令吧!


一、基本语法

首先,convert_top_lines是个外部命令,需要通过“ssc install convert_top_lines”进行安装。使用该命令可以将数据集中的第一、第二行观察值分别转化为变量名、变量标签。值得注意的是,这里的数据集需符合以下两个条件:

(1)数据集中所有变量均为字符型变量;

(2)数据集原始变量名必须为“v1、v2、v3…”的形式。

该命令的基本语法如下:

convert_top_lines[, line2labels list drop]

命令可单独使用,表示仅将第一行观察值作为变量名,且该行观察值在转化后的数据集中仍保留。convert_top_lines命令后添加的选项,有以下含义:

(1)line2labels在提取第一行观察值为变量名的同时,第二行观察值作为对应的变量标签;

(2)drop提取后删除第一行观察值,若与选项line2labels联用,则删除前两行观察值;

(3)list列出前三行观察值,若与选项drop联用,则列出删除观察值前的数据。

有点抽象是不是?别担心,下面通过一个小例子马上就学会啦!

 

二、用法示例 

1、auto数据集的例子 

xlsx或csv格式的数据导入Stata过程中,经常会将原始变量名作为首行数据输入。因此,为方便大家理解,我们这里利用auto数据集,导出一个xlsx形式的数据:

clear allcd "D:\" //定位到自己的路径sysuse autoexport excel using auto1.xlsx, replace firstrow(variables)

现在,我们导出名为“auto1”的新文件,格式为xlsx,内容包含auto数据集的变量名和所有观察值,如下图所示:

然后,我们将“auto1”文件重新导入Stata,此时变量名作为第一行观察值保留在数据集中:

import excel using auto1.xlsx, clear

大家一定跃跃欲试,要拿出convert_top_lines命令来“一显神通”。但不要忘了,使用该命令有两个重要条件——数据为字符型、变量名以“v1v2…”命名。显然,这里的数据集满足条件一,但变量名为“A、B、C…”的形式。因此,我们要用到renvarlab命令批量修改变量名,详见往期推文《renvarlab:链接变量名与标签名的纽带》。程序和截图如下:

renvarlab A-L\v1-v12

现在直接使用convert_top_lines命令,实现目标变量名如下:

convert_top_lines
或者,也可加上drop选项,删除第一行观察值,使变量值更美观:
import excel using auto1.xlsx, clear //数据集变化,需要重新导入、命名renvarlab A-L\v1-v12convert_top_lines,drop

这样就得到我们想要的数据集。对于原数据集的第二行观察值,若要用作变量标签,则增加选项line2labels:

import excel using auto1.xlsx, clearrenvarlab A-L\v1-v12convert_top_lines, line2labels 

describe

可见数据集第二行观察值,被用作变量标签(此处仅举例,该行观察值并非原始数据变量标签)。当然我们也可通过list选项观察数据集前三行数据情况:

import excel using auto1.xlsx, clearrenvarlab A-L\v1-v12convert_top_lines, line2labels drop list //增加drop选项不影响list输出内容

可以发现,增加了drop选项后,仍输出数据集删除观察值前的前三项数据。这个选项方便我们检查数据集中,变量名和变量标签是否一一对应,或位置是否正确。

2、注意事项

还有一个问题需要注意,convert_top_lines命令修改变量名时,会默认所有变量名小写,原本存在的大写格式都会被取代:

import excel using auto1.xlsx, clearreplace A = upper(A) in 1 //将变量A第一行的取值大写renvarlab A-L\v1-v12convert_top_lines

显而易见,这边变量名“MAKE”转换后变为“make”,因此大家在使用这个命令时,多多注意大小写的问题,毕竟,小细节也决定工作的成败哦!







对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!
往期推文推荐
文件太多乱乱的?合并一下吧!
线性回归的正则化 ——岭回归与LASSO回归
Pandas中节约空间的小tip—categorical类型
Ftools命令组之flevelsof命令介绍
疫情下的家庭关系|《请回答1988》影评爬取
教你把Python当美图秀秀用(二)
自己动手进行线性回归计算
personage与年龄
原来这才是查看盲评结果的正确方式
教你把Python当美图秀秀用(一)
用数据透视表剖析泰坦尼克号乘客数据
读入文本文档,intext来帮忙
matchit——解锁文本相似度的钥匙
基于广义线性模型的机器学习算法——线性回归
听说你会魔法?
dummieslab——从分类变量到虚拟变量的“一步之遥”
线上Python课程都面向哪些方向?

关于我们



微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。

此外,欢迎大家踊跃投稿,介绍一些关于stata和python的数据处理和分析技巧。
投稿邮箱:statatraining@163.com
投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存