在我的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...
答案 0 :(得分:2)
一些建议:
inrange()
(也查看inlist)指定范围而不是一系列<
和>
语句; missing()
或!missing()
语句中指定多个项目,例如!missing(start, stop, d)
和听起来你真的想要使用cond()
,它(使用帮助文件中的ex)可用于在一个函数中指定多个条件:
g var = 1如果cond(缺少(x),。,cond(x> 2,50,70))
如果缺少.
则返回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;