Stata知识库包含一条关于从管道读取ASCII数据的说明
允许人们在不将解压缩版本存储在磁盘上的情况下读取文件。我们
从来没有在那里显示的方法取得成功 - 我总是得到错误信息
mypipe.pip: not found
。我们有数TB的数据压缩得非常好,所以
这总是令人失望。我们有兴趣听听它是否适用
其他人。
在对此进行调查时,我们发现了一种似乎更好的解决方法。不像
知识库建议,除ASCII文件外,它还可以使用.dta文件。
这对我们来说非常有趣。这是通过的http选项完成的
use
命令。
我们的第一次尝试是将文件test.cgi添加到我们的webservers cgi-bin
目录中:
#!/bin/sh
echo Content-type: application/x-stata
/usr/bin/zcat /data/sample.dta.gz
我们发现
use http://www.nber.org/test
从Stata开始工作,但这会带来很大的开销,因为文件围绕着 局域网多次,所以我们没有追求从URL或文件名 否则使这变得实用。
我们正在开发一种不需要实际网络服务器的替代方案,甚至是 root权限。这是通过大多数Linux附带的nc命令完成的 分发,也可用于Windows。在Stata提示符下运行 复合命令:
.! (echo -ne "HTTP/1.0 200 OK\r\n\r\n"; zcat /data/sample.dta.gz;) | nc -l 8080 &
此命令将计算机设置为将标头和解压缩文件传输到 从端口8080读取的第一个进程。由于8080是一个高端口,没有特殊的 需要许可才能使用它。在读取文件之前,此命令不会返回 从该端口,它将显示确切的Stata请求。因为& 当nc等待时,Stata继续。然后
. use http://127.0.0.1:8080
请注意,由于use
命令,您不能使用“localhost”而不是127.0.0.1
不接受单部分主机名。
如果您的计算机上没有nc,请查找ncat,netcat或socat。一些版本 在端口号之前需要'-p'。您可以在Windows计算机上安装nc 并且应该能够做同样的事情,但我们还没有尝试过。
这也可以用于ascii文件,加密文件,拆分文件,也许 其他类型。如果只有Stat / Transfer会写入标准输出!
存在安全问题 - 您放弃了Unix中的读取限制 许可位。它也比从磁盘读取未压缩文件慢,但是 对我们来说仍然足够快。
我们一直在尝试将其打包成ado文件,但没有取得多大成功, 因为用户友好的ado程序需要自己找到一个可用的端口, 我们尚未看到一个好的方法,并将其传达回使用 命令,我们也为此感到茫然。我希望名单上有人可能 灵感来建议一种方法或者Statacorp可能只包含减压 进入使用命令。
Daniel Feenberg feenberg@nber.org