-1

我正在使用 Stata 并尝试根据时间/日期计算条件均值。对于每家商店,我想计算每年的平均值(库存)。如果缺少年份差距,那么我想从最接近的两个日期的库存值中取平均值。

我已经使用(如下)来获取每家商店的整体平均值,但我需要更多的粒度。

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,而不是按年计算。

鉴于缺乏定义和至少一个错字,您的较长片段没有完全意义。

请注意,您的变量v1包含在 组中运行 1 的标识符store,并且不区分 的不同值store,正如您(似乎)暗示的那样。它会在任何接近电话结果的地方产生结果,这会降低可信度egen

n没有定义,并且评估它的代码可能是为了

`=n' 

如果你计算

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

将依次计算几种方法,但只有最后一个要计算的方法可以作为r(mean).

样本数据与问题无关。没有year变量,即使dates 是 Stata 每日日期,它们都是 1960 年以内的日期。

抛开所有这些,假设您有变量store,inventoryyear. 你可以试试

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

生成一个减少的collapse均值数据集。如您所问,ipolate插值跨越间隙。fillin可能不足以提供您想要的所有storeyear组合,您可能需要在插值之前手动添加更多年份。如果你想把这些结果和原始数据一起放回去,那就是merge.

总的来说,这是一个非常混乱的问题。

于 2013-02-26T23:30:30.883 回答