彻底解决Stata无法读取过宽文件的问题

在使用Stata爬数据的时候经常会遇到这样一个问题,就是文件中有的行过长(大约超过两万个字符就很难处理了)。这个时候会无法直接读入Stata作为一个变量处理。在过去,我常用的折中办法是使用fileread()函数或者手动断行(当前这里需要用到Sublime Text3等编辑器的替换功能)。然而就在昨天晚上,我发现了一个永久解决这个麻烦的办法。

问题是这样出现的,我发现了这个接口:

http://stockdata.stock.hexun.com/gszl/data/jsondata/jbgk.ashx?count=5000&titType=null&page=1&callback=hxbase_json15

这个接口提供了json格式的全部沪深两市上市公司的基本信息,网页浏览的话是这样的:

如果把这个接口的数据下载为txt文件的话,你会发现这个文件只有一行,而且有200多万个字符。当然也可以通过修改接口的count参数和page参数分成100多次处理,但是效率肯定是非常低的。

Mac用户从这里阅读

我就觉得一定有处理文本文件的shell命令,然后找了一会儿,发现 命令可以实现,下面的shell命令就可以实现把文本中的所有 替换成换行符然后再使用重定向符 将结果输出至另外一个文件 的操作:

打开

然后就很容易处理啦,下面的代码就能整理好这份数据了:

整理结果:

此外上面代码中的下面这几行代码

实际上是可以换成下面的这一句:

附注utrans命令是我自己编写的用于快速转码的命令, 代码如下:

Windows用户从这里阅读

Windows的Powershell环境可以进行文件内容的替换, 但是很尴尬的是powershell中的换行符是`n, 而下面的语句:

非常巧妙地与Stata中的局部宏的引用“撞衫”了! 所以上面的方法就不可行了.Windows系统并没有自带curl命令, 更没有tr命令, 所以首先得安装一下curl命令:

首先打开命令提示符,输入 找到powershell.exe的位置, 然后找到它右键选择以管理员身份打开. 然后就会弹出来一个蓝色的命令行界面.

然后可以安装一个包管理工具choco(这里参考了这篇文章《在windows下使用choco作为包管理工具》). 在以管理员身份打开的powershell里依次输入下面几句命令:

然后是安装另外一个命令 , 这个命令的下载地址是:

http://batch-cn.qiniudn.com/tool/4.0.7/sed.exe

下载之后将 文件放入 即可.

如果你成功的安装好了curl和sed之后, 下面的命令就能实现了自动换行了:

最后

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180816G0052C00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券