【问题标题】:Break a command into several lines in do-file in Stata在Stata的do-file中将命令分成几行
【发布时间】:2014-10-07 14:02:48
【问题描述】:

我想在 Stata 12 的 do-file 中运行 keep 命令:

keep a1 a2 a3 a4 a5 b1 b2 b3 b4 b5 c1 c2 c3 c4

我想要做的是:

keep {a1 a2 a3 a4 a5
     b1 b2 b3 b4 b5
     c1 c2 c3 c4}

我知道 {} 括号不能解决问题,但我正在寻找执行此操作的命令。使用#delimiter ; 也不起作用。

我想这样做是因为变量子组之间存在关系(我打算在上面使用abc 表示)并且我想在我的代码中明确这一点。我永久添加和删除变量。请注意,我不想使用drop 命令(在这种情况下解决方案很简单)。

【问题讨论】:

  • 诸如“分隔符命令不起作用”之类的语句总是不正确的,尤其是在没有显示代码或输出时。

标签: command-line stata break


【解决方案1】:

这只是补充 Roberto 真正解决方案的一个非常简单的技巧。由于您有这么多变量,我发现有时有用的一件事是使用宏对变量进行分组,特别是如果您可以在多个场合使用分组。

loca a a1 a2 a3 a4 a5
loca b b1 b2 b3 b4 b5
loca c c1 c2 c3 c4 c5
keep `a' `b' `c'

【讨论】:

  • 使用通配符或变量范围更容易。 keep a? b? c?keep a1-a5 b1-b5 c1-c5 可能就足够了。
  • 假设变量被整齐地命名,那肯定会更好。 OP 最终可能会在一行中包含所有宏名称。
【解决方案2】:

有几种方法。一种是使用///。一个例子:

clear all
set more off

*----- example data -----

set obs 1

forvalues i = 1/25 {
    gen var`i' = `i'
}

describe

*----- what you want -----

keep var1 var2 ///
    var3-var7 ///
    var8 var11

describe

#delimit 如果使用得当,将会起作用。一个例子:

<snip>

*----- what you want -----

#delimit ;

keep var1 var2 
    var3-var7 
    var8 var11 ;

#delimit cr

describe

还有另一种方法。 help delimit(你已经知道了)声明:

有关详细信息,请参阅 [U] 16.1.3 do-files 中的长行。

该手动输入将您直接指向相关信息。

我怀疑在这种情况下缺乏研究/努力。谷歌搜索(在 do 文件中使用“stata + 断行”)很容易让你到达那里。在尝试解决 Stata 中的问题时,我不建议将其作为您的第一个策略。相反,从 Stata 资源开始:我建议阅读

[U] 3 学习和使用 Stata 的资源

[U] 4 Stata 的帮助和搜索工具。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-11
    • 1970-01-01
    相关资源
    最近更新 更多