Logic Stata中的三元比较运算符?

Logic Stata中的三元比较运算符?,logic,comparison-operators,stata,Logic,Comparison Operators,Stata,在我的Statado脚本中,我经常需要比较可能缺失的日期。不幸的是,的内部表示是给定范围内可能的最大数,因此以下内容适用: 5 < . 5

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

5 < .
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\u-start\u-stop=。如果d==。
如果出现以下情况,则在开始和停止之间替换=1///
!失踪(丁)及!!失踪(开始)&!丢失(停止)和///
启动
而不是以下内容:

gen between_start_stop = (start < d) & (d < stop)
gen介于启动和停止之间=(启动<停止)和(启动<停止)
有没有一种方法可以使用对三值逻辑起作用的比较运算符

即,我希望以下陈述是真实的:

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

有几点建议:

  • 使用
    inrange()
    (同时查看inlist)来指定范围,而不是一系列
    语句
  • 您可以在
    missing()
    !missing()
    语句中指定多个项,如
    !missing(start,stop,d)
  • 听起来您确实想使用
    cond()
    ,它(使用帮助文件中的ex)可用于在一个函数中指定多个条件:

    g var=1,如果条件(缺失(x),条件(x>2,50,70))


  • 返回
    如果
    x
    缺失,返回
    50
    如果
    x>2
    ,返回
    70
    如果
    x<2

    这个类比并不能得到你想要的结果——当已知的d低于已知的开始时,这个公式返回“缺失”(即使在这里不相关的是缺少停止)或者一个已知的d在一个已知的停止点之上(即使这里不相关地缺少start)。这两种情况下的正确值都是“false”。我有一个实用程序(“validly”),它允许“generate”访问三值逻辑并执行您想要的操作——请参阅我的网页上的讨论
    这与一篇进一步扩展的论文有关(但请注意,这篇文章刚刚被《国家统计局杂志》拒绝,因为“太难理解了”

    谢谢eric,这比我杂乱无章的版本有了巨大的改进。我编辑了你的答案,将其格式化,并删除了签名,因为StackOverflow不鼓励这些内容。希望你不要介意!