很多非计算机科班出身的学生或学者,尤其是对于很多社会科学领域的学生或学者,Stata几乎是一个必备的工具和技能,不仅是因为Stata编程简单易学,而且它本身就是一个小巧而强大的软件(技术上甚至可以跑DSGE),足以解决绝大多数问题。
所以像我这样哪怕移情别恋Julia之后,依然难以忘怀当年Stata陪我的无数个夜晚,也会经常习惯性地打开电脑里的某个文件夹,然后熟练地…把数据导入Stata进行处理。
但其实Julia发展到目前的阶段,完全可以在上面码Stata。下面简单介绍一下:
1、读取Stata数据文件
ReadStat.jl不仅可以直接用来读dta文件,而且还能打开SPSS和SAS的数据文件,命令也很简单
using ReadStat
read_dta(“/path/to/something.dta”)
当然,要先安装这个包
Pkg.add(“ReadStat”)
2、运行Stata命令
安装StataCall.jl后,你甚至可以在Julia身上玩Stata。代码示例比如:
srand(1)
#打开Stata
ENV[“STATA_BIN”] = “C:\Program Files (x86)\Stata13\StataMP-64.exe”
#生成个数据表
df = DataFrame(myint = Int64.(floor.(100.*rand(Float64, 10))), myfloat = rand(Float64, 10))
#跑Stata命令
instructions = [“gen newvar1 = myint + myfloat”;
“gen newvar2 = floor(_n/2)”;
“bysort newvar2: egen newvar3 = mean(newvar1)”
]
dfOut = StataCall.stataCall(instructions, df)
3、还有更简洁的
GitHub里的大神jmboehm用StataCall时感觉不爽,大概三个月前,他自己写了个更简洁的包,名为Douglass.jl,以纪念1993年诺奖得主Douglass North。示例代码:
using Douglass, RDatasets
以经典的鸢尾花数据为例
df = dataset(“datasets”, “iris”)
Douglass.set_active_df(:df)
d"replace :z = _n if _n <= 10"
d"drop :z"
d"bysort :Species : egen :z = mean(:SepalLength) if :SepalWidth .> 3.0"
虽然Douglass.jl刚写完没多久,jmboehm本人也还在进一步开发,但目前已经可以执行Stata多个主要命令,比如:
· generate – Creates a new variable and assigns the output from an expression to it.
· replace – Recplaces the content of a variable, but does not change the type.
· egenerate (or egen for short) – Creates a new variable. Operates on vectors.
· ereplace (or erep for short) – Analogous to egen, replaces values of existing variables.
· drop – Drops the specified observations (if used in conjunction with if) or variables (without if)
· rename – Rename a variable
· sort – Sort the rows activate DataFrame by the specified columns
· reshape – Reshape the activate DataFrame between wide and long format (reshape_long, reshape_wide)
· merge – Merge the active DataFrame with another one in the local scope (merge_m1, merge_1m, merge_11)
· duplicates_drop – Delete duplicate rows, also by subset of columns
感兴趣的可以去他的GitHub细看,jmboehm (Johannes Boehm) · GitHub
感觉有意思的话可以给他打个星鼓励下。我感觉这个包将来会有很多人玩。
最后,Julia从推广伊始便被很多人诟病其数据处理能力太low,不如Stata和其他软件,但随着近些年的发展,Julia不仅可以实现上述Stata的功能,还可以用JuliaDB.jl直接进行数据处理,其功能也在不断拓展。