-1

月を含むデータセットがあり、各人が仕事を開始する月が異なる場合。例えば:

person         date       date_started      date_count
  Tim        1/1/2000       3/1/2000           -2
  Tim        2/1/2000       3/1/2000           -1
  Tim        3/1/2000       3/1/2000            0
  John       1/1/2000       7/1/2000           -6
  John       2/1/2000       7/1/2000           -5
  John       3/1/2000       7/1/2000           -4
  John       4/1/2000       7/1/2000           -3
  John       5/1/2000       7/1/2000           -2
  John       6/1/2000       7/1/2000           -1
  John       7/1/2000       7/1/2000            0
  John       8/1/2000       7/1/2000            1
  John       9/1/2000       7/1/2000            2
  John      10/1/2000       7/1/2000            3
  Mary       3/1/2000       3/1/2000            0
  Mary       4/1/2000       3/1/2000            1

date_count列を取得する最も効率的な方法は何ですか? また、最初の月は 1、それ以外は 0 の列があります。むしろそれを使ってdate_count

4

2 に答える 2

1

ここの難しさがわかりません。質問は私にはあまり説明されていないようです。

  1. あなたは月について言及していますが、あなたの例は毎日の日付を示しているため、問題における月の役割は謎です。

  2. 必要な変数は、2 つの毎日の日付の差です。毎日の日付変数が 2 つある限り (Dimitriy が文字列日付からそれらを取得する方法を説明しています)、それは単なる減算です。

(後で追加)私の不確実性は、国際的なリストで地域の慣習が普遍的であると仮定するとどうなるかを示しています. 日付を日/月/年として表示する規則と、日付を月/日/年として表示する規則の 2 つが混同されやすいです。明らかに、2 番目の規則を使用しています。もしそうなら、問題は、を使用して毎日の日付から毎月の日付に変換することmofd()です。それから、言ったようにそれは減算です。

于 2013-01-31T09:06:07.567 に答える
1

これが最適な方法かどうかはわかりませんが、うまくいくはずだと思います:

/* convert your dates to Stata's date format from strings */
gen date2=daily(date,"MDY");
gen date_started2=daily(date_started,"MDY");
format date2 date_started2 %td;

/* this is the main code */
gen before = date_started2>date2;
bys person before: egen date_count2 = rank(abs(date_started2 - date2));
replace date_count2 = date_count2 - 1 if before==0;
replace date_count2 = -date_count2 if before==1;
drop before;

編集:

Mea culpa。私はあなたの質問を完全に誤解して、各人物観察イベントの開始日までのカウントダウンを望んでいたことを意味していました. 実際には、もっと単純なものが必要です。

gen date_count2=mofd(daily(date,"MDY")) - mofd(daily(date_started,"MDY"));

これは、文字列変数として格納されている date と date_started を使用していることを前提としています。Daily() は Stata の日付形式に変換され、mofd() は暦月に変換されます。あとは、ただの違いです。

于 2013-01-31T04:42:02.757 に答える