查看原文
其他

读入文本文档,intext来帮忙

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

本文作者:宁刘莹

文字编辑:张馨月

技术总编:张计宝

我们知道,若想将stata内存中的数据导出为文本文件,outfile命令可以帮助我们方便快捷地实现,那么如果想要将文本文件导入到内存中呢?大家可能会想到,infile命令可以读入文本型的数据,但如果文本文档中是汉字呢?这时就需要用到intext模块。

intext模块包含两个命令:intext和tfconcat。小编首先为大家介绍一下intext命令,它主要用于将文本文件读入到stata内存中一组字符串变量下,并且不会删除掉空白字符。它可以理解为是outfile的逆命令,也就是说,如果一个文本文档由intext读入再由outfile导出,两个文档的内容将会是一模一样的。

intext的语法格式为:
intext using filename , generate(prefix) [ length(#) clear ]
选项length(#)用来指定每个变量下字符串的最大长度,如果不填写则默认值为80;选项generate(prefix)中填写的是生成的字符串变量名前缀,即生成的变量会以prefix1、prefix2、……prefixn的形式显示,n是最大字符串变量数,取决于段落字符个数以及每个变量下字符串长度,这个长度由length选项指定。需要注意的是,它并不是一个可选的选项,在写的过程中必须要指明变量前缀名。
那么如果我们想导入多个文本文档呢?我们知道dsconcat可以将多个数据集拼接在一起,类似地,intext模块下的另一个命令tfconcat用于将多个文本文档拼接在一起。tfconcat可以将多个文本文档作为一个列表读入,并在stata内存中生成一个新的数据集,同时会覆盖掉之前所有的数据。它的语法规则如下:
tfconcat filename_list , generate(prefix) [ length(#) tfid(newvarname) tfname(newvarname) obsseq(newvarname) ]
可以看到,除了generate和length这两个共用的选项外,tfconcat还有三个独有的选项。
选项tfid(newvarname)用于生成一列新的整数型变量,变量下是每行观测值对应的文本文档的同名值标签,标签对应的值取值为从1到n,n是全部的文件数量;选项tfname(newvarname)用于生成一列新的字符型变量,变量下是每行观测值对应的文本文档名称;选项obsseq(newvarname)用于生成一列新的整数型变量。我们知道在读入文本文档时,每个文档都会产生一到多行观测值,obsseq可以帮助我们按照每个文档分类,将来自同一文档的观测值从1到n进行编号。

下面我们用一个简单的例子来综合体会一下。

首先我们需要安装这个模块:

ssc install intextcd "D:\mainwork\1statawork\intext"intext using text.txt, clear gen(var) len(5)
这里小编读入的是事先存在的文本文档,并将每列变量下字符串个数限制在5之内。
可以看到,文本文档“text.txt”中的每一段文字,包括空白字符在内,都按照5个字符的最大值被分到了每一个变量下了。
接下来我们读入三个文本文档:
tfconcat text.txt text2.txt text3.txt, gen(vname) len(5)

可以看到三个文档都被读到了内存中,并按照最大长度为5生成了7列字符串变量。
为了区分开三个文档的数据并方便调用,我们可以使用tfid选项来生成值标签:
tfconcat text.txt text2.txt text3.txt, gen(vname) len(5) tfid(filelabel)


此时我们看到filelabel变量列的数据是蓝色的,说明是值标签类型的数据,接下来我们查看一下这些标签对应的值:
label list

每个文档名为标签,对应的值是1到3三个数字。
由于在同一文本文档中都可能有不止一段文本,因此每个文档读进数据中会生成1至多行观测值,我们若想给每个文档进行分组,并对同一文档中的各个段落进行组内编号,就可以加上obsseq选项:
tfconcat text.txt text2.txt text3.txt, gen(vname) len(5) tfid(filelabel) obsseq(clusternum)

以看到每个文档都实现了组内编号,效果其实等同于下述命令:

bysort filelabel: gen newvarname = _n

对于intext模块的基本介绍到这里就结束啦,更多功能一起来动手试试吧!






对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!
往期推文推荐

matchit——解锁文本相似度的钥匙

基于广义线性模型的机器学习算法——线性回归
听说你会魔法?
dummieslab——从分类变量到虚拟变量的“一步之遥”
线上Python课程都面向哪些方向?
子类与父类
用requests库爬取淘宝数据
WordStat—Stata的文本分析小助手
数据筛选理还乱,datacheck能诊断

如何用简单的手法绘制出不一样的海外疫情趋势图

matplotlib绘制数学函数
gen的再进化
Stata版大家来找茬—cfout就够了
另辟蹊径js逆向爬取百度翻译
可迭代对象、迭代器、生成器傻傻分不清楚
Ftools命令组之fegen命令介绍
提升效率的利器——如何用labvarch批量修改变量标签

关于我们



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

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

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

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