在Stata中计算特定组的平均值

在Stata中计算特定组的平均值,stata,Stata,编辑,见下文 我拥有一个事务级数据集。每次观察都是在特定商店进行的品牌销售交易。其中一笔交易包含所购买产品的品牌信息和每盎司产品支付的美分数。我们可以清楚地分辨出这笔交易是否发生在门店#1、2、3、…、10:总共有10家门店。数据集高度不平衡,这意味着每家商店都有不同数量的交易和可用品牌。有些商店有100000笔交易,大约60000笔交易,等等 我的目标是通过计算每笔交易中每盎司的平均价格,来大致了解每家商店的价格水平。如果我们对每家商店的所有交易进行平均,我们可能会得到关于整体价格水平的扭曲图

编辑,见下文

我拥有一个事务级数据集。每次观察都是在特定商店进行的品牌销售交易。其中一笔交易包含所购买产品的品牌信息和每盎司产品支付的美分数。我们可以清楚地分辨出这笔交易是否发生在门店#1、2、3、…、10:总共有10家门店。数据集高度不平衡,这意味着每家商店都有不同数量的交易和可用品牌。有些商店有100000笔交易,大约60000笔交易,等等

我的目标是通过计算每笔交易中每盎司的平均价格,来大致了解每家商店的价格水平。如果我们对每家商店的所有交易进行平均,我们可能会得到关于整体价格水平的扭曲图片,因为我们没有考虑所有商店的完全相同的产品组合

因此,我需要生成一个与我的数据集分离的小表,该表将计算在所有可用商店销售的那些品牌的平均价格。如果某个品牌甚至在其中一家商店也没有售出,则在计算时必须忽略此交易

原始数据集看起来像:

brand   cents/oz    store
BrandA    9          1
BrandB    10         1
BrandC    6.5        1

BrandA    1          2
BrandB    2          2

BrandA    5          3
BrandB    6          3
BrandC    6.5        3
按照我的指示,我们将:

store     avecents
  1          (9+10)/2=9.5 
  2          (1+2)/2=1.5
  3          (5+6)/2=5.5
 etc..
对于每个
aveconts
计算,我们仅包括品牌A和品牌B,因为它们出现在每个商店中。品牌C完全被忽略,因为它不是在商店2出售的

根据考克斯博士的反馈进行编辑:

这是一个样本数据集,包含3家不同商店的品牌价格,
1085053
1084590
1091828
。如果我们使用Cox博士提供的code
egen tag=tag(品牌店)
,Stata确实会在每家店内标记不同的品牌。但是,如果使用代码(
egen nstores=total(tag),按(store)
,Stata将只统计每家门店内不同品牌的数量,其中
nstores=3
。因此,如果nstores==3,c(平均价格)第三个代码
表brand store无效,因为列
nstores
包含品牌计数。您可以尝试以下代码:

clear
set more off
input str8 store str30 brand cenoz
1085053 SIERRA_NEVADA_PALE_ALE 9.715278
1085053 MILLER_HIGH_LIFE 5.319445
1085053 BACARDI_SILVER_MOJITO 9.013889
1085053 REDHOOK_ESB 9.430555
1085053 SMIRNOFF_ICE_GREEN_APPLE_BITE 9.360121
1085053 BIG_SKY_MOOSE_DROOL_BROWN_ALE 9.708333
1085053 WOODCHUCK_DRAFT_CIDER_DARK 8.872066
1085053 GRAIN_BELT_PREMIUM 6.937501
1085053 BACARDI_SILVER_MOJITO 9.013889
1085053 REDHOOK_ESB 9.430555
1084590 SAND_CREEK_SEASONAL 10.40278
1084590 MOLSON_CANADIAN 8.180555
1084590 NEWCASTLE_BROWN_ALE 8.256945
1084590 MICHELOB_GOLDEN_DRAFT_LIGHT 5.087963
1084590 SIERRA_NEVADA_PALE_ALE 12.63393
1084590 MILLER_HIGH_LIFE 6.013889
1084590 BACARDI_SILVER_MOJITO 9.020833
1084590 REDHOOK_ESB 7.625
1084590 SMIRNOFF_ICE_GREEN_APPLE_BITE 4.854167
1084590 BIG_SKY_MOOSE_DROOL_BROWN_ALE 12.48611
1091828 SIERRA_NEVADA_PALE_ALE 13.37798
1091828 MILLER_HIGH_LIFE 6.243055
1091828 SIERRA_NEVADA_PALE_ALE 13.37798
1091828 MILLER_HIGH_LIFE 6.243055
1091828 BACARDI_SILVER_MOJITO 8.319445
1091828 REDHOOK_ESB 6.590278
1091828 SMIRNOFF_ICE_GREEN_APPLE_BITE 5.782407
1091828 BIG_SKY_MOOSE_DROOL_BROWN_ALE 12.48611
1091828 MILLER_LITE 6.590278
1091828 BUD_LIGHT 5.895833
end

egen tag = tag(brand store) 
egen nstores = total(tag), by(store) 
table brand store if nstores == 3, c(mean cenoz)
collapse price if nstores == 3, by(brand store) 

对于每个品牌,我们要求其在所有商店都有销售。在Stata中,这个问题已经在更一般的术语中进行了大量讨论,如计算不同的观测值。如果我们只为每个不同的商店品牌组合标记一次(标记为0或1)

然后跨品牌添加标签

 egen nstores = total(tag), by(brand) 
然后,当且仅当
nstores==10
时,一个品牌在所有10家商店中销售。因此,你想要的方法是按

 table brand store if nstores == 10, c(mean cenoz)
并通过

 collapse cenoz if nstores == 10, by(brand store) 

编辑:上面修复了一个bug

没有代码的问题在这里被广泛认为是离题的。这个网站不是真的关于“什么是好代码?”而是“我的代码有什么问题?”我已经回答了这个问题,但还是添加了这个评论。谢谢!请看我问题的编辑部分。添加一些真实的数据很有帮助。请尝试修改后的代码。考克斯,非常感谢你的反馈。编辑后的版本效果很好。在我的700000个观察数据集中,我能够识别出所有商店销售的一组品牌。
 collapse cenoz if nstores == 10, by(brand store)