Stata中的三元比较运算符?

时间:2011-06-07 08:54:56

标签: logic comparison-operators stata

在我的Stata do脚本中,我经常需要比较可能缺少的日期。不幸的是,.的内部表示是给定范围的最大可能数,因此以下成立:

5 < .

这可能会变得非常烦人,例如在检查日期是否在某个范围内时:

gen between_start_stop     = . if d == .
replace between_start_stop = 1 if ///
    !missing(d) & !missing(start) & !missing(stop) & ///
    start < d & d < stop
replace between_start_stop = 0 if ///
    ((!missing(d) & !missing(start) & !(start < d)) | ///
     (!missing(d) & !missing(stop) & !(d < stop))

而不是以下内容:

gen between_start_stop = (start < d) & (d < stop)

有没有办法使用比较运算符 与三元逻辑

即,我希望以下陈述成立:

(5 < .) == .
(. < .) == .
(. < 5) == .
(. & 1) == .
(. & 0) == 0
etc...

2 个答案:

答案 0 :(得分:2)

一些建议:

  1. 使用inrange()(也查看inlist)指定范围而不是一系列<>语句;
  2. 您可以在missing()!missing()语句中指定多个项目,例如!missing(start, stop, d)
  3. 听起来你真的想要使用cond(),它(使用帮助文件中的ex)可用于在一个函数中指定多个条件:

    g var = 1如果cond(缺少(x),。,cond(x> 2,50,70))

  4. 如果缺少.则返回x,如果50则返回x > 2,如果70则返回x < 2

答案 1 :(得分:0)

这个比喻并没有得到你想要的东西 - 当一个已知的d低于一个已知的开始时(即使停止,这里是无关紧要的,缺失)或已知的d高于已知停止时,该公式返回'缺失'(即使开始,这里也是无关紧要的,缺失)。两种情况下的正确值都是“假”。我有一个实用程序(有效地&#39;),它允许生成&#39;访问三值逻辑并执行您想要的操作 - 请参阅我的网页上的讨论http://www.nuffield.ox.ac.uk/People/sites/KIM/SitePages/Biography.aspx 它与纸张的链接进一步扩展(但被警告 - 刚被斯塔塔杂志拒绝为#34;太难理解&#34;