我使用Stata几年以及其他语言如R. Stata很棒,但有一件事让我烦恼:生成/替换行为,特别是" ...已定义"错误。
这意味着如果我们想要运行一段代码两次,如果这段代码包含变量的定义,那么这个定义需要2行:
capture drop foo
generate foo = ...
虽然在其他语言中只需要一行,例如R。
还有另一种方法可以定义组合"生成"和"替换"在一个命令?
答案 0 :(得分:0)
我不知道有任何方法直接这样做。此外,正如@ Roberto的评论所暗示的那样,简单地发出generate
命令不会覆盖(参见:replace
)变量的内容。
为了能够在保持数据完整性的同时执行此操作,您需要在问题指出时发出两个单独的命令(在生成新变量之前显式删除现有变量) - 我将此视为Stata强制执行的方法用户要清楚他/她的意图。
可能会注意到Stata在这方面并不孤单。例如,SQL Server要求用户在创建具有相同名称的表(在同一数据库中)之前删除现有表,不允许在表中使用具有相同名称的多个列等,并且所有这些都是有充分理由的。< / p>
然而,如果你真的能够在Stata中发行单行代码来做你想做的事情,你可以编写一个非常简单的程序。以下内容可以帮助您入门:
program mkvar
version 13
syntax anything=exp [if] [in]
capture confirm variable `anything'
if !_rc {
drop `anything'
}
generate `anything' `exp' `if' `in'
end
然后您自然会将程序保存到Stata会找到的目录中的mkvar.ado(即Windows上的C:\ ado \ personal \。如果您不确定,请键入sysdir
),并将其调用使用:
mkvar newvar=expression [if] [in]
现在,我还没有对上面的代码进行过多次测试,因此您可能需要进行一些调试,但在我尝试的示例中它已经运行良好。
在结束语中,我建议您在执行此操作时要小心 - 当然,您需要对更改数据保持警惕,在do文件操作数据时保留原始数据的副本在记忆中等。