1

私のStatadoスクリプトでは、欠落している可能性のある日付を比較しなければならないことがよくあります。残念ながら、の内部表現は.指定された範囲の可能な最大数であるため、次のようになります。

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)

3値論理で動作する比較演算子を使用する方法はありますか?

つまり、私は次のステートメントが真実であることを望みます:

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

2 に答える 2

2

いくつかの提案:

  1. 一連のandステートメントinrange()の代わりに範囲を指定するには、(inlistも参照してください)を使用します。<>
  2. missing()または!missing()のようなステートメント!missing(start, stop, d)で複数の項目を指定できます
  3. 本当に使用したいようですcond()。これは(ヘルプファイルのexを使用して)1つの関数で複数の条件を指定するために使用できます。

    g var = 1 if cond(missing(x)、。、cond(x> 2,50,70))

欠落している.場合は戻り、の場合は戻り、次の場合は戻りますx50x > 270x < 2

于 2011-07-12T15:36:02.000 に答える
0

アナロジーはあなたが望むものをあなたに与えません-この定式化は、既知のdが既知の開始より下にある場合(停止がここでは無関係に欠落している場合でも)、または既知のdが既知の停止より上にある場合(開始であっても)「欠落」を返しますここでは無関係ですが、欠落しています)。どちらの場合も正しい値は「false」です。私は、「生成」が3値論理にアクセスし、必要なことを実行できるようにするユーティリティ(「有効に」)を持っています。私のWebページhttp://www.nuffield.ox.ac.uk/People/sites/の説明を参照してください。 KIM / SitePages / Biography.aspx は、さらに拡大する論文へのリンクを持っています(ただし、警告されます。これは、StataJournalによって「理解するのが非常に難しい」として拒否されたばかりです。

于 2014-04-22T19:37:33.423 に答える