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