我一直在大学使用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) 我正在写一个Stata do文件,如果用户不提供某些参数,我想提供默认值.为此,我想检查宏是否未定义.
我想出了一个hacky方法来做到这一点:
*** For a local macro with the name value:
if `value'1 != 1 {
...do stuff
}
Run Code Online (Sandbox Code Playgroud)
但我想知道是否有惯用的方法来做到这一点.
这是Stata在一步中处理的数据分析中的基本问题.
使用时间不变数据(x0)和2000年和2005年的时变数据(x1,x2)创建一个宽数据框:
d1 <- data.frame(subject = c("id1", "id2"),
x0 = c("male", "female"),
x1_2000 = 1:2,
x1_2005 = 5:6,
x2_2000 = 1:2,
x2_2005 = 5:6
)
Run Code Online (Sandbox Code Playgroud)
ST
subject x0 x1_2000 x1_2005 x2_2000 x2_2005
1 id1 male 1 5 1 5
2 id2 female 2 6 2 6
Run Code Online (Sandbox Code Playgroud)
我想像面板一样塑造它,所以数据看起来像这样:
subject x0 time x1 x2
1 id1 male 2000 1 1
2 id2 female 2000 2 2
3 id1 male 2005 5 5
4 id2 female 2005 6 6
Run Code Online (Sandbox Code Playgroud)
我可以用reshapest 做到这一点 …
我想使用esttab(ssc install estout)按组生成汇总统计信息,其中包含平均差异和显着性的列.很容易将这些生成为两个单独的表estpost,使用summarize,和ttest,并手动组合,但我想自动化整个过程.
以下代码生成所需表的两个组件.
sysuse auto, clear
* summary statistics by group
eststo clear
by foreign: eststo: quietly estpost summarize ///
price mpg weight headroom trunk
esttab, cells("mean sd") label nodepvar
* difference in means
eststo: estpost ttest price mpg weight headroom trunk, ///
by(foreign) unequal
esttab ., wide label
Run Code Online (Sandbox Code Playgroud)
我可以打印两张桌子并将其粘贴到一张桌子上.
* can generate similar tables and append horizontally
esttab, cells("mean sd") label
esttab, wide label
* manual, cut-and-paste solution …Run Code Online (Sandbox Code Playgroud) 我是Stata的新手,我想知道如何将包含日期的字符串变量更改为日期格式.
变量中的数据如下所示:
YYYY-MM-DD
我应该首先删除破折号,以便Stata可以识别格式以便以后使用gen var = date()吗?
谢谢您的帮助.
aaa<- data.frame(sex=c(1,1,2,2,1,1), group1=c(1,2,1,2,2,2),group2=c("A","B","A","B","A","B"))
Run Code Online (Sandbox Code Playgroud)
stata命令:
count if sex==1 & group1==2
count if sex==1 & group2=="A"
Run Code Online (Sandbox Code Playgroud)
count计算满足指定条件的观察数.如果未指定条件,count将显示数据中的观察数.
怎么算R?谢谢.
Stata有一个非常好的命令,egen这使得计算观察组的统计数据变得容易.例如,可以计算每个组的最大值,平均值和最小值,并将它们作为变量添加到详细数据集中.Stata命令是一行代码:
by group : egen max = max(x)
Run Code Online (Sandbox Code Playgroud)
我从来没有summarise在dplyr包中找到相同的命令,这使得计算每个组的统计数据变得容易,但是我必须运行一个循环来将统计数据与每个观察结果相关联:
library("dplyr")
N <- 1000
tf <- data.frame(group = sample(1:100, size = N, replace = TRUE), x = rnorm(N))
table(tf$group)
mtf <- summarise(group_by(tbl_df(tf), group), max = max(x))
tf$max <- NA
for (i in 1:nrow(mtf)) {
tf$max[tf$group == mtf$group[i]] <- mtf$max[i]
}
Run Code Online (Sandbox Code Playgroud)
有没有人有更好的解决方案?
我在Ubuntu 14.04.2 LTS服务器上的统计软件包Stata(v14.2)中使用odbc insert命令将一些数据插入Teradata DB(v14.10).
这个Stata命令有一个block选项,它使Stata以1000行的块发送数据.不幸的是,ODBC驱动程序似乎在进行单行插入(根据监视系统的DBA).
是否可以更改ODBC驱动程序行为?
如果是这样,如何指定ODBC驱动程序在.odbc.ini文件或连接字符串中使用的块大小?
我看过TD ODBC手册和谷歌搜索,但我找不到任何有用的东西.
最近我一直试图将大量随机效应模型适用于相对较大的数据集.假设在最多25个时间点观察到大约50,000人(或更多).如此大的样本量,我们包含了许多我们正在调整的预测因子 - 可能有50个左右的固定效应.我lme4::glmer在R中使用模型拟合二元结果,每个主题都有随机截距.我不能详细介绍数据,但glmer我使用的命令的基本格式是:
fit <- glmer(outcome ~ treatment + study_quarter + dd_quarter + (1|id),
family = "binomial", data = dat)
Run Code Online (Sandbox Code Playgroud)
其中两个study_quarter和dd_quarter与各约20个级别的因素.
当我尝试在R中使用此模型时,它会运行大约12-15个小时,并返回一个无法收敛的错误.我做了一堆故障排除(例如,遵循这些指导原则),没有任何改进.并且最终收敛甚至不接近(最大梯度在5-10附近,而收敛标准是0.001我认为).
然后我尝试使用melogit命令在Stata中拟合模型.该模型适合在2分钟内完成,没有收敛问题.相应的Stata命令是
melogit outcome treatment i.study_quarter i.dd_quarter || id:
Run Code Online (Sandbox Code Playgroud)
是什么赋予了?Stata是否只有更好的拟合算法,或者更好地针对大型模型和大型数据集进行了优化?令人惊讶的是,运行时间有多么不同.
我正在使用graph twoway scatter并添加自己的ylabels.
我经常有很长的标签并将它们分成多行.但是,我遇到一个问题,当我想打破一些在两行的标签,而不是其他.
当我这样做时,单线标签相对于它们的tick标记是偏心的,就像Stata期望它们也有两条线一样.
请参阅下面的简单说明:
sysuse auto, clear
/* This graph has one long label and one short but both are off-center
relative to their tick marks */
twoway scatter length weight, ytitle("") ylabel(220 ///
`" "This one is a very long" "label, broken up" "' 140 "This one is not", ///
ang(horizontal))
/* The order of labels on the graph *does not* appear to matter */
twoway scatter length weight, …Run Code Online (Sandbox Code Playgroud)