Logic Stata中的三元比较运算符?
在我的StataLogic Stata中的三元比较运算符?,logic,comparison-operators,stata,Logic,Comparison Operators,Stata,在我的Statado脚本中,我经常需要比较可能缺失的日期。不幸的是,的内部表示是给定范围内可能的最大数,因此以下内容适用: 5 < . 5
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不鼓励这些内容。希望你不要介意!