Stata:生成/替换替代品?

时间:2015-09-11 10:44:47

标签: stata

我使用Stata几年以及其他语言如R. Stata很棒,但有一件事让我烦恼:生成/替换行为,特别是" ...已定义"错误。

这意味着如果我们想要运行一段代码两次,如果这段代码包含变量的定义,那么这个定义需要2行:

capture drop foo
generate foo =  ...

虽然在其他语言中只需要一行,例如R。

还有另一种方法可以定义组合"生成"和"替换"在一个命令?

1 个答案:

答案 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文件操作数据时保留原始数据的副本在记忆中等。