我经常在工作中使用stata.我选择的文本编辑器是(g)vim.我一直在使用这里或这里提供的脚本将代码从vim发送到stata.这个功能是非常实用的,实际上是唯一阻止我完全切换到Linux的东西.脚本是用AutoIT编写的,所以我不能在linux中使用它们.它们也基本上独立于文本编辑器的选择,编写它们的人使用的是notepad ++.
基本上,这些脚本与我的vimrc中的几行一起允许我将选择或整个文件发送到正在运行的stata窗口(如果没有打开,则首先启动stata).
我正在寻找一个在linux中执行此操作的解决方案,但我不知道从哪里开始.在linux中有两个不同的stata版本,命令行的stata和xstata是gui版本.我需要使用gui版本,因为命令行版本的功能有限,所以屏幕/ tmux被排除在外.
如果这是微不足道的,我真的很抱歉错过了它,并非常感谢解决方案.我也无法找到我可以使用的vim的现有插件.如果没有,我愿意花一些时间来弄清楚如何实施解决方案.然而,正确方向的指针会非常有用.我对linux和编程一般比较陌生,但愿意学习.
关于工具:我不知道bash,但在某些时候我想要查看它.我已经在python中涉足了一点,所以这也没关系.如果此任务还有其他优势,请告诉我.
任何帮助是极大的赞赏.AutoIT脚本托管在网站上,但如果需要,我可以在此处发布我的Windows设置.
编辑
好的,经过评论中的一些争论,这里是我需要翻译的基本AutoIT脚本.(我更喜欢每次都不会覆盖系统剪贴板内容的解决方案.)
Edit2我想这就是脚本本质上的作用:它检查一个打开的stata窗口,选择它(或执行一个),将要执行的内容粘贴到一个临时文件中,切换到stata窗口,选择命令行使用ctrl-1(以及可能已经使用ctrl-a编写的任何内容),然后粘贴"tempfile"到命令行,然后命令行执行发送的代码.至少这是我理解它的方式.
最后评论
我不久前在bash中编写了一个解决方案,它在这里作为这个问题的先前版本的答案发布.
; Declare variables
Global $ini, $statapath, $statawin, $statacmd, $dofile, $clippause, $winpause, $keypause
; File locations
; Path to INI file
$ini = @ScriptDir & "\rundo.ini"
;; contents of ini file are the following
;[Stata]
;; Path to Stata executable
;statapath = "C:\Program Files\Stata11\StataSE.exe"
;; Title of Stata window
;statawin = "Stata/SE 11.2"
;; Keyboard shortcut for Stata command window
;statacmd = …Run Code Online (Sandbox Code Playgroud) 我已经在Windows上使用Stata和gVim一段时间了.最近我换了Linux,我打算也从Stata转到R.
我的一个朋友正在使用R和Emacs ESS,这似乎工作得很完美,但我宁愿继续使用vim.我已经安装了vim-r-plugin2,但是,我只能将代码发送到运行R的单独终端.我宁愿将我的屏幕拆分为运行R的缓冲区和一个带有.R文件的缓冲区,然后从中发送代码一个到另一个.使用Emacs中的ESS似乎可行,您可以在缓冲区中运行终端/ R而不会出现问题.我还没有办法让这项工作成功.vim的R插件使用screen,打开运行shell的缓冲区的唯一方法就是Conque Shell插件.
我知道,与Emacs不同,Vim被设计成一个简单的文本编辑器.然而,让R在缓冲区中运行似乎更加实用.
我希望我的问题是可以理解的,请耐心等待我最近才切换到Linux,除了统计数据之外几乎没有任何关于编程的知识.谢谢!
我一直在大学使用Vim在Windows中编写Stata脚本一段时间.我正在学习R,我想完全切换到Linux作为我的操作系统(我最近在笔记本电脑上切换到Ubuntu).R在Windows和Linux中都可以与Vim一起使用,但是我有时候还需要使用Stata.在Windows中,我一直使用Stata用户提供的简单AutoIt脚本将行/整个文件发送到stata进行评估.这个脚本在Linux中不起作用.
这就是脚本的样子
; AutoIt v3 script to run a Stata do-file from an external text editor
; Version 3.1, Friedrich Huebler, fhuebler@gmail.com, www.huebler.info, 30 March 2009
; Declare variables
Global $ini, $statapath, $statawin, $dofile, $winpause, $keypause, $clippause
; File locations
; Path to INI file
$ini = @ScriptDir & "\rundo.ini"
; Path to Stata executable
$statapath = IniRead($ini, "Stata", "statapath", "C:\Program Files\Stata10\wsestata.exe")
; Title of Stata window
$statawin = IniRead($ini, "Stata", "statawin", "Stata/SE 10.1")
; Path to do-file that is …Run Code Online (Sandbox Code Playgroud) 我试图抓取http://www.nscb.gov.ph/ggi/database.asp,特别是从选择市/省获得的所有表格.我正在使用python与lxml.html和mechanize.到目前为止,我的刮刀工作正常,但是HTTP Error 500: Internal Server Error在提交市政[19]"Peñarrubia,Abra"时我得到了.我怀疑这是由于字符编码.我的猜测是,烯字符(上面带有波浪号的n)会导致这个问题.我怎样才能解决这个问题?
我脚本的这一部分的一个工作示例如下所示.因为我刚开始使用python(并且经常使用我在SO上找到的片段),所以进一步的评论非常感谢.
from BeautifulSoup import BeautifulSoup
import mechanize
import lxml.html
import csv
class PrettifyHandler(mechanize.BaseHandler):
def http_response(self, request, response):
if not hasattr(response, "seek"):
response = mechanize.response_seek_wrapper(response)
# only use BeautifulSoup if response is html
if response.info().dict.has_key('content-type') and ('html' in response.info().dict['content-type']):
soup = BeautifulSoup(response.get_data())
response.set_data(soup.prettify())
return response
site = "http://www.nscb.gov.ph/ggi/database.asp"
output_mun = csv.writer(open(r'output-municipalities.csv','wb'))
output_prov = csv.writer(open(r'output-provinces.csv','wb'))
br = mechanize.Browser()
br.add_handler(PrettifyHandler())
# gets municipality stats
response = br.open(site)
br.select_form(name="form2")
muns = br.find_control("strMunicipality2", type="select").items
# …Run Code Online (Sandbox Code Playgroud) 有更快的方法吗?我想这是不必要的慢,并且这样的任务可以通过基本功能完成.
df <- ddply(df, "id", function(x) cbind(x, perc.total = sum(x$cand.perc)))
Run Code Online (Sandbox Code Playgroud)
我是很新的R.我已经看过了by(),aggregate()和tapply(),但并没有让他们在所有或我想要的方式工作.我希望将总和附加到原始数据帧,而不是返回较短的向量.做这个的最好方式是什么?
编辑:这是应用于我的数据的答案的速度比较.
> # My original solution
> system.time( ddply(df, "id", function(x) cbind(x, perc.total = sum(x$cand.perc))) )
user system elapsed
14.405 0.000 14.479
> # Paul Hiemstra
> system.time( ddply(df, "id", transform, perc.total = sum(cand.perc)) )
user system elapsed
15.973 0.000 15.992
> # Richie Cotton
> system.time( with(df, tapply(df$cand.perc, df$id, sum))[df$id] )
user system elapsed
0.048 0.000 0.048
> # John
> system.time( …Run Code Online (Sandbox Code Playgroud) 我刚刚完成了我的第一个python脚本,一个来自philipines的选举数据的刮刀.我没有编程背景,我已经使用stata进行统计分析,最近在R中考虑了一点,因为我想在某些时候切换.但我想学习python从网站和其他来源提取数据.到目前为止,我只浏览了python教程,O'Reilly的"学习Python"正在等待我的架子.我从其他人的脚本中获取灵感并浏览包含的包文档,编写了以下脚本.
我基本上寻找的是一般建议.该脚本确实有效,但是有多余的部分吗?我应该采用不同的结构吗?是否有任何典型的(或简单的愚蠢)初学者错误?
我自己编写了一些问题,我在脚本之后列出了这些问题.
import mechanize
import lxml.html
import csv
site = "http://www.comelec.gov.ph/results/2004natl/2004electionresults_local.aspx"
br = mechanize.Browser()
response = br.open(site)
output = csv.writer(file(r'output.csv','wb'))
br.select_form(name="ctl00")
provinces = br.possible_items("provlist")
for prov in provinces:
br.select_form(name="ctl00")
br["provlist"] = [prov]
response = br.submit()
br.select_form(name="ctl00")
pname = str(br.get_value_by_label("provlist")).strip("[]")
municipalities = br.possible_items("munlist")
for mun in municipalities:
br.select_form(name="ctl00")
br["munlist"] = [mun]
response = br.submit(type="submit", name="ctl01")
html = response.read()
root = lxml.html.fromstring(html)
try:
table = root.get_element_by_id(id="dlistCandidates")
data = [
[td.text_content().strip() for td in row.findall("td")]
for row in table.findall('tr')
]
except KeyError: …Run Code Online (Sandbox Code Playgroud) 我知道之前已经详细介绍了扁平化嵌套列表的主题,但我认为我的任务有点不同,我找不到任何信息.
我正在写一个刮刀,作为输出我得到一个嵌套列表.顶级列表元素应该成为电子表格形式的数据行.但是,由于嵌套列表通常具有不同的长度,因此我需要在展平列表之前展开它们.
这是一个例子.我有
[ [ "id1", [["x", "y", "z"], [1, 2]], ["a", "b", "c"]],
[ "id2", [["x", "y", "z"], [1, 2, 3]], ["a", "b"]],
[ "id3", [["x", "y"], [1, 2, 3]], ["a", "b", "c", ""]] ]
Run Code Online (Sandbox Code Playgroud)
我最终想要的输出是
[[ "id1", "x", "y", z, 1, 2, "", "a", "b", "c", ""],
[ "id2", "x", "y", z, 1, 2, 3, "a", "b", "", ""],
[ "id3", "x", "y", "", 1, 2, 3, "a", "b", "c", ""]]
Run Code Online (Sandbox Code Playgroud)
但是,像这样的中间列表
[ [ "id1", [["x", "y", "z"], …Run Code Online (Sandbox Code Playgroud) 我正在尝试将120mb的恐怖事件XML数据库(这里可以下载的第一个文件http://wits.nctc.gov/Export.do)转换为电子表格,以便我可以将其与其他数据合并并进行统计分析.
到目前为止,我一直在使用Stata,现在它没用,因为它不会读取XML.该网站按月提供较小的文件,可以通过excel打开,但excel不会以我想要的形式显示它们,应该有更好的方法来转换整个文件,而不是打开超过一百个单个文件,手动保存它们选项卡分开然后合并它们.
我正在寻找一种方法将完整的WITS.xml文件转换为电子表格,其中一行代表一个恐怖事件,并且不会丢失来自xml的信息.即使是结构不同的XML也可能没问题.我已经尝试过转换器,但它们要么不是免费的,要么不按我想要的方式执行,要么文件大小太大,我不知道如何使用xslt.我正在学习经济学,我的编程知识几乎不存在,这越来越成为一个缺点.我已经看到有一个我可以使用的R包,也许现在是开始学习R或其他语言的合适时机.但是,如果有一种快速简便的方法,我肯定会喜欢它.