本文介绍了在特定于备选方案的数据组织过程中,如何避免某个变量重复?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

更新:我很抱歉在前面提供了一个非常简单、不可重现的例子。这是可以复制的东西:

*使用此特定于案例的数据集:

week  units pr categ      id    avecenoz1   avecenoz2   avecenoz3
1667    1   0   1       371247  4.276693    4.871173    6.430658
1686    1   0   1       581457  4.372499    5.042025    6.45528
1656    1   0   2       217025  4.107188    4.900006    6.236501
1649    1   0   2       138704  4.355612    4.920326    6.548411
1685    1   0   3       575278  4.297557    4.971671    6.408175
1642    1   0   3       75440   4.290808    4.848145    6.384848
1655    1   0   3       204879  4.275114    4.905337    6.400794
1667    1   0   3       376364  4.276693    4.871173    6.430658
1671    1   1   3       426125  4.274153    5.001119    6.355516

id是进行购买的客户的唯一客户ID,

猫是指购买所属的产品类别,

Week-购买发生在哪一周,

avecenoz1是特定周内类别1的平均价格,

avecenoz2是特定周内类别2的平均价格,

avecenoz3是特定周内类别3的平均价格,

单位始终等于1

和pr是购买是否在促销(1)或不是(0)。

*Scott Long的用户编写的代码,用于将变量从特定于大小写转换为特定于替换:

case2alt, alt(avecenoz) case(id) choice(categ) altnum(mode)

*这是您得到的:

 id    mode week units pr cater avecenoz choice y1  y2  y3
75440   1   1642    1   0   3   4.290808    0   1   0   0
75440   2   1642    1   0   3   4.848145    0   0   1   0
75440   3   1642    1   0   3   6.384848    1   0   0   1
138704  1   1649    1   0   2   4.355612    0   1   0   0
138704  2   1649    1   0   2   4.920326    1   0   1   0
 138704 3   1649    1   0   2   6.548411    0   0   0   1
204879  1   1655    1   0   3   4.275114    0   1   0   0
204879  2   1655    1   0   3   4.905337    0   0   1   0
204879  3   1655    1   0   3   6.400794    1   0   0   1
217025  1   1656    1   0   2   4.107188    0   1   0   0
217025  2   1656    1   0   2   4.900006    1   0   1   0
217025  3   1656    1   0   2   6.236501    0   0   0   1
371247  1   1667    1   0   1   4.276693    1   1   0   0
371247  2   1667    1   0   1   4.871173    0   0   1   0
371247  3   1667    1   0   1   6.430658    0   0   0   1
376364  1   1667    1   0   3   4.276693    0   1   0   0
376364  2   1667    1   0   3   4.871173    0   0   1   0
376364  3   1667    1   0   3   6.430658    1   0   0   1
426125  1   1671    1   1   3   4.274153    0   1   0   0
426125  2   1671    1   1   3   5.001119    0   0   1   0
426125  3   1671    1   1   3   6.355516    1   0   0   1
575278  1   1685    1   0   3   4.297557    0   1   0   0
575278  2   1685    1   0   3   4.971671    0   0   1   0
575278  3   1685    1   0   3   6.408175    1   0   0   1
581457  1   1686    1   0   1   4.372499    1   1   0   0
581457  2   1686    1   0   1   5.042025    0   0   1   0 
581457  3   1686    1   0   1   6.45528     0   0   0   1

如您所见,在转换时,pr被复制了3次。然而,对于每个复制的交易,只有售出的商品的指示符变量应该等于1,而不是其余的选择。请帮我防止公关复制。谢谢!


原始邮件:

我正在将数据集从特定于案例转换为特定于备选方案。原始数据集如下所示:

id   category   week   price1   price2    price3     pr

 1       1        1     4.24     4.88     3.35       1
 2       2        1     4.24     4.88     3.35       0
 3       3        1     4.24     4.88     3.35       1
 4       2        1     4.24     4.88     3.35       0

其中:

id是进行购买的客户的唯一客户ID,

类别是指采购所属的产品类别,

Week-购买发生在哪一周,

price1为类别1在特定周内的平均价格,

价格2是类别2在特定一周内的平均价格,

Price3是特定周内类别3的平均价格,

和pr是购买是否在促销(1)或不是(0)。

如何确保公关在转换后不会复制自身?

使用代码

我得到的是:

id   mode   week  cater  choice  price   y1    y2    y3    pr

 1     1     1      1       1    4.24     1     0     0    1
 1     2     1      1       0    4.88     0     1     0    1
 1     3     1      1       0    3.35     0     0     1    1
 2     1     1      1       0    4.24     1     0     0    0
 2     2     1      1       1    4.88     0     1     0    0
 2     3     1      1       0    3.35     0     0     1    0
 3     1     1      1       0    4.24     1     0     0    1
 3     2     1      1       0    4.88     0     1     0    1
 3     3     1      1       1    3.35     0     0     1    1
 4     1     1      1       0    4.24     1     0     0    0
 4     2     1      1       1    4.88     0     1     0    0
 4     3     1      1       0    3.35     0     0     1    0

除公关外,其他工作都很顺利。我不希望它为每个客户ID复制所有可能的替代方案。对于每个复制的交易,只有已售出的商品的指示符变量应该等于1,而不是其余的选择:

id   mode   week  cater  choice  price   y1    y2    y3    pr

 1     1     1      1       1    4.24     1     0     0    1
 1     2     1      1       0    4.88     0     1     0    0
 1     3     1      1       0    3.35     0     0     1    0
 2     1     1      1       0    4.24     1     0     0    0
 2     2     1      1       1    4.88     0     1     0    0
 2     3     1      1       0    3.35     0     0     1    0
 3     1     1      1       0    4.24     1     0     0    0
 3     2     1      1       0    4.88     0     1     0    0
 3     3     1      1       1    3.35     0     0     1    1
 4     1     1      1       0    4.24     1     0     0    0
 4     2     1      1       1    4.88     0     1     0    0
 4     3     1      1       0    3.35     0     0     1    0

可以这样做吗?

非常感谢!

推荐答案

我最初使用merge的答案应该可以正常工作。下面是一个示例。

clear all
set more off

*----- original data -----

input ///
id   catchosen   week   pricea   priceb    pricec     pr
 1       1        1     4.24     4.88     3.35       1
 2       2        1     4.24     4.88     3.35       0
 3       3        1     4.24     4.88     3.35       1
 4       2        1     4.24     4.88     3.35       0
end

list

* modify some things to do a -merge- later on
rename catchosen alt
rename pr pr2

* save this data in a temporary file
tempfile orig
save "`orig'"


*----- data that your command produces -----

clear all

input ///
id   alt   week  cater  choice  price   y1    y2    y3    pr
 1     1     1      1       1    4.24     1     0     0    1
 1     2     1      1       0    4.88     0     1     0    1
 1     3     1      1       0    3.35     0     0     1    1
 2     1     1      1       0    4.24     1     0     0    0
 2     2     1      1       1    4.88     0     1     0    0
 2     3     1      1       0    3.35     0     0     1    0
 3     1     1      1       0    4.24     1     0     0    1
 3     2     1      1       0    4.88     0     1     0    1
 3     3     1      1       1    3.35     0     0     1    1
 4     1     1      1       0    4.24     1     0     0    0
 4     2     1      1       1    4.88     0     1     0    0
 4     3     1      1       0    3.35     0     0     1    0
end

* merge this data with the original data. keep only -pr2-
merge 1:1 id alt using "`orig'", keepusing(pr2)
replace pr2 = 0 if missing(pr2)

* compare -pr- with -pr2-. the latter is what you want.
list, sepby(id)  

但正如Joe Canner在Statalist.org中指出的,一个简单的:

replace pr = 0 if choice == 0

执行case2alt后,也应该可以工作,而且要简单得多。

这篇关于在特定于备选方案的数据组织过程中,如何避免某个变量重复?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-30 22:09