-1

私は Stata を使用しており、時間/日付に基づいて条件付き平均を計算しようとしています。各店舗について、年間平均(在庫)を計算したいと思います。年のギャップが欠落している場合は、最も近い 2 つの日付の在庫値から平均を取得したいと考えています。

(下記) を使用して、店舗ごとの全体的な平均を取得しましたが、もっと細かくする必要があります。

egen mean_inv = mean(inventory), by (store)

私も同様の結果でこのループを試しました:

by id, sort: gen v1'=_n'
forvalues x = 1/'=n'{
by store: sum inventory if v1==`x'
replace mean_inv= r(mean) if v1==`x'
}

視覚的には、店舗ごとの平均在庫が必要です: (店舗 ID は連続していません)

5/1/2003 2/3/2006 8/9/2006  3/5/2007   6/9/2007   2/1/2008
   13        18        12       15       24          11
     [mean1]    [mean2]   [mean3]   [mean4]   [mean5]


store   date    inventory
 1  16750   17
 1  18234   16
 1  15844   13
 1  17111   14
 1  17870   13
 1  16929   13.5
 1  17503   13
 4  15987   18
 4  15896   16
 4  18211   16
 4  17154   18
 4  17931   24
 4  16776   23
12  16426   26
12  17681   17
12  16386   17
12  16603   18
12  17034   16
12  17205   16
42  15798   18
42  16022   18
42  17496   16
42  17870   18
42  16204   18
42  16778   14
33  18053   23
33  16086   13
33  16450   21
33  17374   19
33  16814   19
33  15834   16
33  16167   16
56  17686   16
56  17623   18
56  17231   20
56  15978   16
56  16811   15
56  17861   20
4

1 に答える 1

1

コードを問題の単語の説明に関連付けるのは困難です。

あなたのegen呼び出しはstore、年ではなく で平均を計算します。

定義の欠如と少なくとも 1 つのタイプミスを考えると、長いフラグメントは完全には意味がありません。

v1あなたの変数には、のグループ内で 1 を実行する識別子が含まれており、あなたが暗示しているように、storeの異なる値を区別しないことに注意してください。store呼び出しによる結果に近い結果が得られるという信頼性が損なわれegenます。

nは定義されておらず、それを評価するコードはおそらく意図されています

`=n' 

計算すると

 by store: sum inventory if v1 == `x' 

いくつかの平均が順番に計算されますが、最後に計算されたものだけr(mean)が としてアクセスできます。

サンプル データは問題とは無関係です。year変数はなく、 dates が Stata の毎日の日付であっても、すべて 1960 年内の日付です。

それはさておき、変数 と があるとstoreinventoryますyear。あなたが試すことができます

 collapse inventory, by(store year) 
 fillin store year 
 ipolate inventory year, gen(inventory2) by(store) 

collapse、平均の削減されたデータセットを生成します。あなたipolateが尋ねるように、ギャップを越えて補間します。必要なすべてのandの組み合わせfillinを提供するには不十分な場合があり、補間の前にさらに年を手動で追加する必要がある場合があります。これらの結果を元のデータに戻したい場合、それは.storeyearmerge

全体として、これはかなり厄介な質問です。

于 2013-02-26T23:30:30.883 に答える