2013-02-26 2 views
-1

Я использую Stata и пытаюсь вычислить условные средства на основе времени/даты. Для каждого магазина я хочу рассчитать среднее (инвентарь) в год. Если отсутствуют пробелы в пробеге, тогда я хочу взять среднее значение из ближайших двух значений запасов запасов.Stata longwise average

Я использовал (ниже), чтобы получить общее количество средств в магазине, но мне нужно больше детализации.

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' 
} 

Визуально, я хочу, значит, инвентарь за магазин: (идентификатор магазина не последовательный)

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 

ответ

1

Это трудно связать ваш код с описанием слова вашей проблемы.

Ваш egen звонок рассчитывает средства по store, а не году.

Ваш длинный фрагмент не дает полного смысла, учитывая отсутствие определений и, по крайней мере, одну опечатку.

Обратите внимание, что переменная v1 содержит идентификаторы, которые работают 1 до внутри групп store, и не различает разные показатели store, как вы (кажется,) следует. Это вызывает доверие к тому, что он дает результаты в любом месте рядом с вызовом egen.

n не определен и код его оценки предположительно предназначен для

`=n' 

Если рассчитать

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

несколько средств будут рассчитаны в своей очереди, но только последняя будут рассчитанный, будет доступен как r(mean).

Данные примера не связаны с проблемой. Там нет year переменных, и даже если date s является Stata ежедневных дат, они все даты в пределах 1960.

Установка всего это в стороне, предположит, что переменные store, inventory и year. Вы можете попробовать

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

collapse производит уменьшенный набор данных средств. Как вы спрашиваете, интервал между ipolate интерполирует. fillin может быть недостаточно, чтобы дать все комбинации store и year, которые вы хотите, и вам, возможно, потребуется добавить дополнительные годы вручную перед интерполяцией. Если вы хотите вернуть эти результаты с исходными данными, это merge.

В целом, это довольно грязный вопрос.

+0

Спасибо за ваш ответ Ник. В то время как я рассчитываю средства в магазине, мне нужно среднее значение в магазине в год. Я пытался сделать это через свое заявление egen. Информация года не является однородной, но я попробую ваши варианты разложения и заполнения. –

+0

Ваши изменения в коде исправить некоторые ошибки, но ввести другие. К сожалению, это никому не поможет. Например, первые две строки в вашем блоке из пяти являются незаконными, но по разным причинам. –