8

私は大学でしばらくの間、Vimを使用してWindowsでStataスクリプトを作成してきました。私は現在Rを学んでおり、OSとして完全に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 passed to AutoIt
; Edit line to match editor used, if necessary
$dofile = $CmdLine[1]

; Delays
; Pause after copying of Stata commands to clipboard
$clippause = IniRead($ini, "Delays", "clippause", "100")
; Pause between window-related operations
$winpause = IniRead($ini, "Delays", "winpause", "200")
; Pause between keystrokes sent to Stata
$keypause = IniRead($ini, "Delays", "keypause", "1")

; Set SendKeyDelay and WinWaitDelay to speed up or slow down script
Opt("WinWaitDelay", $winpause)
Opt("SendKeyDelay", $keypause)

; If more than one Stata window is open, the window 
; that was most recently active will be matched
Opt("WinTitleMatchMode", 2)

; Check if Stata is already open, start Stata if not
If WinExists($statawin) Then
  WinActivate($statawin)
  WinWaitActive($statawin)
  ; Activate Stata Command Window and select text (if any)
  Send("^4")
  Send("^a")
  ; Run saved do-file
  ; Double quotes around $dofile needed in case path contains blanks
  ClipPut("do " & '"' & $dofile & '"')
  ; Pause avoids problem with clipboard, may be AutoIt or Windows bug
  Sleep($clippause)
  Send("^v" & "{Enter}")
Else
  Run($statapath)
  WinWaitActive($statawin)
  ; Activate Stata Command Window
  Send("^4")
  ; Run saved do-file
  ; Double quotes around $dofile needed in case path contains blanks
  ClipPut("do " & '"' & $dofile & '"')
  ; Pause avoids problem with clipboard, may be AutoIt or Windows bug
  Sleep($clippause)
  Send("^v" & "{Enter}")
EndIf

; End of script

私のvimrcで次のように

" STATA DO-FILE SCRIPTS

fun! RunIt()
  w
  !start "C:\Programme\Stata10\integvim\rundo3\rundo.exe" "%:p"
endfun
map <F8> :<C-U>call RunIt()<CR><CR>
imap <F8> <Esc>:<C-U>call RunIt()<CR><CR>

fun! RunDoLines()
  let selectedLines = getbufline('%', line("'<"), line("'>"))
 if col("'>") < strlen(getline(line("'>")))
  let selectedLines[-1] = strpart(selectedLines[-1], 0, col("'>"))
  endif
 if col("'<") != 1
  let selectedLines[0] = strpart(selectedLines[0], col("'<")-1)
  endif
 let temp = tempname() . ".do"
  call writefile(selectedLines, temp)
    exec "!start C:\\Programme\\Stata10\\integvim\\rundo3\\rundo.exe " . temp
    au VimLeave * exe "!del -y" temp
endfun
map <F9> :<C-U>call RunDoLines()<CR><CR> 
imap <F9> <Esc>:<C-U>call RunDoLines()<CR><CR> 

これは本当に実用的であり、事実上、私がまだWindowsに固執している唯一の理由です。Ubuntu用にそのようなものを入手するにはどうすればよいですか?私はLinuxを初めて使用しますが、統計以外のプログラミングについてはあまりよく知りません。どんな助けでも大歓迎です。(emacsを提案しないでください。stataのemacsサポートに欠陥があります。Rとの統合ははるかに優れていますが、今のところVimを使い続けたいと思います。)

おそらく関連するトピックについて:私はおそらくデータを操作し、経験的分析をより長い時間行うため、Pythonの学習を検討しています。このような問題の解決や解析など、一部のタスクに役立つと思います。ウェブサイトからのデータ。これはお勧めですか、それとも別の言語を見る必要がありますか(またはアイデアを完全に忘れる必要があります)?

4

4 に答える 4

1

私はもうstataを使うことはめったにありませんが、ある時点でbashで簡単な解決策を見つけました。このスクリプトは、私の.vimrcの数行で実行され、正常に機能します。システムによっては、遅延を調整する必要がある場合があります。

#!/bin/bash

# needs wmctrl, xte and xsel
# to get them run
# sudo apt-get install wmctrl xautomation xsel
# in debian/ubuntu linux

#copy to clipboard "do filename"
echo 'do ' '"'$1'"' | xsel -b

# get current window id
winid = $(xprop -root | awk '/_NET_ACTIVE_WINDOW\(WINDOW\)/{print $NF}')

# check for stata window, if found activate else execute
# use correct version here
if [ "$(pgrep stata)" ] 
then
    wmctrl -a 'Stata/MP 11.2'
else
    xstata &
    sleep .1 
fi

# delay depends on window manager etc
# .1 ok with xmonad in 10.04
sleep .1 

# switch to command line, ctrl-4 in stata 10, ctrl-1 in 11/12
# and select existing text via ctrl-a
xte 'keydown Control_L' 'key 1' 'key A' 'usleep 100' \
    'key V' 'keyup Control_L' 
sleep .1
xte 'key Return'
sleep .3


# go back to editor window
wmctrl -i -a $winid 

これを調整してvimrcに入れてください。

"" STATA DO-FILE SCRIPTS
fun! RunIt()
  w
  "adjust this path to the bash script
  !sh "/home/username/.rundo.sh" "%:p"
endfun
au FileType stata noremap <F8> :<C-U>call RunIt()<CR><CR>
fun! RunDoLines()
  let selectedLines = getbufline('%', line("'<"), line("'>"))
 if col("'>") < strlen(getline(line("'>")))
  let selectedLines[-1] = strpart(selectedLines[-1], 0, col("'>"))
  endif
 if col("'<") != 1
  let selectedLines[0] = strpart(selectedLines[0], col("'<")-1)
  endif
 let temp = tempname() . ".do"
  call writefile(selectedLines, temp)
          "adjust this path to the bash script
          exec "!sh /home/username/.rundo.sh " . temp
    "au VimLeave * exe "!del -y" temp
    au VimLeave * silent exe '!del /Q "'.$TEMP.'\*.tmp.do"'
endfun
au FileType stata noremap <F9> :<C-U>call RunDoLines()<CR><CR> 
于 2012-09-22T13:47:42.883 に答える
1

Linuxに切り替える場合は(永久に)1。stataを呼び出し、ライセンスをLinuxライセンスに切り替えて(無料でインストールできます)、ネイティブにインストールします。その後、vimからstataを起動するにはbashが必要です。スクリプト(私はvimの専門家ではありません)2。または、サポートされているすべてのプラットフォームに1つのライセンスを持つstata11を購入できます。ラムの半分以上のギグをスタタに与えるためにワインを入手するので、ネイティブのスタタ10をインストールしました

私はPython、Stata、R、LaTeXなどにgeditを使用しています。これは何でも処理し、gtksourceviewは構文の強調表示やスタイルなどを簡単に追加できます。

Pythonはデータ分析に最適です。を参照してください。

http://www.scipy.org/ http://openopt.org/Welcome http://www.macworld.com/appguide/app.html?id=63924&expand=false

ウェブサイトをスクレイピングするために

http://scrapy.org/ http://wwwsearch.sourceforge.net/mechanize/

そして、テキストからデータを解析するために、一般的に私たちは http://pyparsing.wikispaces.com/を持っています

私はあなたが役に立つかもしれないたくさんのファイルを持っています(stataと他のもののためのgtksoureview言語定義、いくつかの本のpdfコピー(いくつかのコピーレフト))、しかし私はこのウェブサイトでファイルを添付する方法を知りません

于 2010-11-21T10:13:13.550 に答える
1

[編集]:おっと、あなたの主な質問はAutoItスクリプトに関連していることに気づきました。申し訳ありませんが、これをLinuxに変換する方法がわかりません。簡単な方法はないと思います。xautomationまたは他の同様のツールを調べたいと思うかもしれませんが、それはまったく異なる球技です。

あなたの.vimrc代わりに:

!start "C:\Programme\Stata10\integvim\rundo3\rundo.exe" "%:p"

Linuxで同じことをするコマンドで。これは次のようになります。

!/usr/share/... "%:p"

私にはStataについての手がかりがないので、他の誰かからの正確なコマンドを見つける必要があります。

また、私にはよくわかりません"%:p":vimヘルプでそれを調べて、WindowsとLinuxの違いを比較してください。

于 2010-12-09T19:41:45.650 に答える
1

Linuxでは、slime.vimと呼ばれるvimのプラグインを使用できます。これにより、vimを離れることなくvimから実行中のRプロセスにコードをパイプできます。私はこれをmysql、php、python、ocamlのMacで使用しており、うまく機能します。唯一の注意点は、それ自体が悪いことではない魔法を実行するために画面を使用することです。

私があなたの質問を正しく理解していれば、これはあなたに非常に役立つと信じています。幸運とそれがあなたを助けることを願っています。

于 2010-12-14T14:28:06.700 に答える