当然,这在不离开 Stata 的情况下是可能的。我正在使用运行 OS X 的 Mac。详细信息可能因您的操作系统而异,我猜是 Windows。
Python和Stata方法
假设我们有以下简单的 Python 程序,称为hello.py
:
#!/usr/bin/env python
import csv
data = [['name', 'message'], ['Monica', 'Hello World!']]
with open('data.csv', 'w') as wsock:
wtr = csv.writer(wsock)
for i in data:
wtr.writerow(i)
wsock.close()
这个“程序”只是将一些假数据写入脚本工作目录中名为 data.csv 的文件中。现在确保脚本是可执行的:chmod 755 hello.py
.
在 Stata 中,您可以执行以下操作:
! ./hello.py
* The above line called the Python program, which created a data.csv file.
insheet using data.csv, comma clear names case
list
+-----------------------+
| name message |
|-----------------------|
1. | Monica Hello World! |
+-----------------------+
这是一个简单的例子。您的案件的完整过程将是:
outsheet
使用 URL或其他命令将文件写入磁盘
- 用于
!
调用 Python 脚本
insheet
使用orinfile
或其他命令将输出读入 Stata
- 通过删除文件进行清理
capture erase my_file_on_disk.csv
如果不清楚,请告诉我。它在 *nix 上运行良好;正如我所说,Windows 可能会有所不同。如果我有一个 Windows 盒子,我会测试它。
纯 Stata 解决方案(有点像 hack)
另外,我认为您想要完成的事情可以完全在 Stata 中完成,但这是一个 hack。这里有两个程序。第一个只是打开一个日志文件并请求 url(这是第一个参数)。第二个读取该日志文件并使用正则表达式来查找 Stata 被重定向到的 url。
capture program drop geturl
program define geturl
* pass short url as first argument (e.g. http://bit.ly/162VWRZ)
capture erase temp_log.txt
log using temp_log.txt
copy `1' temp_web_file
end
上述程序将无法完成,因为该copy
命令将(故意)失败。它也不会(故意)自行清理。所以我创建了下一个程序来读取发生了什么(并获取 URL 重定向)。
capture program drop longurl
program define longurl, rclass
* find the url in the log file created by geturl
capture log close
loc long_url = ""
file open urlfile using temp_log.txt , read
file read urlfile line
while r(eof) == 0 {
if regexm("`line'", "server says file permanently redirected to (.+)") == 1 {
loc long_url = regexs(1)
}
file read urlfile line
}
file close urlfile
return local url "`long_url'"
end
你可以像这样使用它:
geturl http://bit.ly/162VWRZ
longurl
di "The long url is: `r(url)'"
* The long url is: http://www.ciwati.it/2013/06/10/wdays/?utm_source=twitterfeed&
* > utm_medium=twitter
您应该一个接一个地运行它们。使用此解决方案可能会变得很糟糕,但它确实可以找到您要查找的 URL。我可以建议另一种方法是联系缩短服务并很好地询问一些数据吗?
copy
如果 Stata 的某个人正在阅读此内容,那么返回 HTTP 响应标头信息会很好。完全在 Stata 中执行此操作有点过时。就我个人而言,我会完全使用 Python 来处理这类事情,并在拥有所需的一切后使用 Stata 来分析数据。