Троичный оператор сравнения в стате? - PullRequest
1 голос
/ 07 июня 2011

В моих скриптах 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 ]

2 голосов
/ 12 июля 2011

Пара предложений:

  1. используйте inrange() (также смотрите inlist) для указания диапазонов вместо серии операторов < и >;
  2. вы можете указать несколько элементов в missing() или !missing() операторах, таких как !missing(start, stop, d) и
  3. , это действительно звучит так, как будто вы хотите использовать cond(), что (используяНапример, из файла справки) можно использовать для указания нескольких условий в одной функции:

    g var = 1, если cond (отсутствует (x),., cond (x> 2,50,70))

возвращает ., если x отсутствует, возвращает 50, если x > 2, и возвращает 70, если x < 2

0 голосов
/ 22 апреля 2014

Аналогия не дает вам того, что вы хотите - эта формулировка возвращает «отсутствует», когда известный d ниже известного начала (даже если остановка здесь, здесь не имеет значения, отсутствует) или известный d выше известного останова (даже если начало есть, тут неуместно, не хватает).Правильное значение в обоих случаях - «ложь».У меня есть утилита («правильно»), которая позволяет «генерировать» доступ к трехзначной логике и делает то, что вы хотите - см. Обсуждение на моей веб-странице http://www.nuffield.ox.ac.uk/People/sites/KIM/SitePages/Biography.aspx, в которой есть ссылка на статью, расширяющуюся далее (нопредупрежден - это только что было отклонено Stata Journal как «слишком сложное для понимания»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...