楼主: 虾滑真好吃
1150 6

[数据管理求助] 请教大家,如何根据是否处于同一天来填充对应的缺失值?附上dataex [推广有奖]

  • 0关注
  • 0粉丝

大专生

25%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
465 点
帖子
10
精华
0
在线时间
75 小时
注册时间
2020-3-11
最后登录
2023-8-3

楼主
虾滑真好吃 发表于 2020-8-17 10:07:46 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
再次补充一下数据库的内容,可以以这张截图为参考,该截图中所有的点击和下单的数据都是针对同一个sku_id。这个标注了1的,就是这个人在3.31下单的时候,商品A的折扣是0,但其实有很多人在3.31也点击了商品A但没买的,比如剩下两个画红圈的部分,是他们的clickdate(由于没有买所以orderdate是缺失值),我现在想做的是:希望能把圆圈1那里显示的商品A在3月31日的折扣0全部填充到其他所有用户在3月31日点击过这个商品A的数据里
QQ图片20200817214610.png

如题,我现在merge了两张表,一张是click表的数据,只记录user的clickdate和sku_id,另外一张表是order表,记录了user下单的时间(orderdate)和商品id(sku_id)和该商品的原价,折扣,最后价格等,现在我想要根据order表中的折扣数据(即direct_discount_per_unit)去填充click表中的折扣缺失值,由于折扣可能在不同的时候变化比较大,所以我现在希望做的是:先比较orderdate和clickdate是否相等,如果相等,则用当天order表中的折扣数据填充对应click表中sku的折扣,如果order表里一个sku在一天内有多个折扣则用均值mean填充click表中的折扣。现在主要的问题是我不太懂如何去表达orderdate和clickdate是否处于同一天这个条件命令,希望能得到各位老师的回答,谢谢!

另外,现在已经尝试过bys sku_id: egen discount=mean(direct_discount_per_unit) if orderdate==clickdate,但是该命令做出来只能够把同一个用户对应的clickdate和orderdate相同的填充出来,但我想要的结果是,假设有一个用户在3.20下单商品A,就有该日的discount数据,假设为10,那么不管是哪个用户,只要是在3.20号点击了A商品但没下单的折扣数据,全部都填充为10
  1. * Example generated by -dataex-. To install: ssc install dataex
  2. clear
  3. input str10(sku_id user_id) double(clickdate orderdate) float direct_discount_per_unit
  4. "00104dbcd7" "2d32e918d6" 21251     .  .
  5. "00104dbcd7" "c340c63382" 21269 21269 20
  6. "00104dbcd7" "630699ed68" 21258     .  .
  7. "00104dbcd7" "0020bc07df" 21245     .  .
  8. "00104dbcd7" "f67628079a" 21258     .  .
  9. "00104dbcd7" "51d3aef1d6" 21272 21250 20
  10. "00104dbcd7" "2db2516659" 21273     .  .
  11. "00104dbcd7" "d7001d5ab5" 21267     .  .
  12. "00104dbcd7" "c7f569a403" 21269     .  .
  13. "00104dbcd7" "d1261c4f1a" 21256     .  .
  14. "00104dbcd7" "dddd850d2f" 21245     .  .
  15. "00104dbcd7" "951d5909dc" 21259     .  .
  16. "00104dbcd7" "ab8606dfe1" 21255     .  .
  17. "00104dbcd7" "2005aad556" 21263     .  .
  18. "00104dbcd7" "221de94d82" 21264 21263 20
  19. "00104dbcd7" "92930db053" 21269 21271 20
  20. "00104dbcd7" "95108b339e" 21267     .  .
  21. "00104dbcd7" "51f6ad1e2a" 21249     .  .
  22. "00104dbcd7" "96b657568f" 21261     .  .
  23. "00104dbcd7" "e9d97606e3" 21257     .  .
  24. "00104dbcd7" "7f643c4494" 21253     .  .
  25. "00104dbcd7" "9c95553c58" 21255     .  .
  26. "00104dbcd7" "45383bcaf4" 21251     .  .
  27. "00104dbcd7" "0d360a51a7" 21249 21251 20
  28. "00104dbcd7" "3118cdd0a8" 21258 21257 20
  29. "00104dbcd7" "d00acca3f3" 21270 21270 20
  30. "00104dbcd7" "58877da43e" 21264     .  .
  31. "00104dbcd7" "bb7c828e74" 21251     .  .
  32. "00104dbcd7" "f8f2c7a704" 21258     .  .
  33. "00104dbcd7" "3157c3fe59" 21274     .  .
  34. "00104dbcd7" "c958feca57" 21274     .  .
  35. "00104dbcd7" "92930db053" 21271 21271 20
  36. "00104dbcd7" "29b38385d2" 21247     .  .
  37. "00104dbcd7" "8005881b3f" 21249 21249 20
  38. "00104dbcd7" "d33aae81ed" 21253 21250 20
  39. "00104dbcd7" "34c624705f" 21250     .  .
  40. "00104dbcd7" "6b24b41f01" 21257 21257 20
  41. "00104dbcd7" "7aedc11fb7" 21244     .  .
  42. "00104dbcd7" "08410557e2" 21246     .  .
  43. "00104dbcd7" "78afb804d5" 21251     .  .
  44. "00104dbcd7" "49c7063c7b" 21274 21274 20
  45. "00104dbcd7" "ab4a91dff4" 21257     .  .
  46. "00104dbcd7" "a6906b5d2c" 21264     .  .
  47. "00104dbcd7" "42f1fe6e8a" 21257 21256 20
  48. "00104dbcd7" "fa80d3736a" 21261     .  .
  49. "00104dbcd7" "ab2bc31c41" 21261     .  .
  50. "00104dbcd7" "eb361c7ab3" 21259     .  .
  51. "00104dbcd7" "546e95d5ac" 21274     .  .
  52. "00104dbcd7" "b7489ac487" 21263     .  .
  53. "00104dbcd7" "6418488832" 21253     .  .
  54. "00104dbcd7" "627f2d92ab" 21250     .  .
  55. end
  56. format %td clickdate
  57. format %td orderdate
复制代码





二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:Data 缺失值 generated Discount generate

沙发
DΘstinyじò 发表于 2020-8-17 13:29:18
你的时间数据本身就是以天计算的,是不是同一天,直接相等判断就行。我想你可能是想问还是后面说这个点击时间和下单时间的匹配问题。怎么判断点击时间有没有对应下单时间的折扣信息,是一个匹配问题。
先保存你的示例数据。
可以试一下面代码:
  1. bys sku_id orderdate: egen mean_discount=mean(direct_discount_per_unit)
  2. keep orderdate mean_discount
  3. drop if orderdate==.
  4. rename  orderdate clickdate
  5. merge m:m clickdate using 示例数据
复制代码

先按照商品和下单时间分组,给出直接折扣信息的均值。保留下单时间和均值折扣,重命名下单时间为点击时间,因为之前的计算同一天的均值折扣是一样的,也就不用删除重复值,用m:m匹配就行。

藤椅
虾滑真好吃 发表于 2020-8-17 21:44:54
DΘstinyじò 发表于 2020-8-17 13:29
你的时间数据本身就是以天计算的,是不是同一天,直接相等判断就行。我想你可能是想问还是后面说这个点击时 ...
谢谢您!我试了一下,还是和我之前做的结果一样,只能匹配到单个用户他orderdate和clickdate相等的时候的discount数据
我想了解的是:其他的只点击了商品A但没买的用户,他们当天在点击的时候,商品A的折扣是怎样的。这个当天就是指order表里面有人在同一天下单了商品A,就有了其在这一天的原价,折扣等数据,现在匹配到的就只有这些在当天既点击又下单了的用户的数据,但是我想把这个order表里的折扣数据匹配到click表里那些完全没下单的信息中

我讲的有点乱,我再更新一张截图到主楼里,如果您还灵感,还希望不吝赐教!

板凳
黃河泉 在职认证  发表于 2020-8-18 08:08:18
DΘstinyじò 发表于 2020-8-17 13:29
你的时间数据本身就是以天计算的,是不是同一天,直接相等判断就行。我想你可能是想问还是后面说这个点击时 ...
建议用远都不要用 merge "m:m" ...。

报纸
虾滑真好吃 发表于 2020-8-18 10:22:23
黃河泉 发表于 2020-8-18 08:08
建议用远都不要用 merge "m:m" ...。
请问黄老师是否有好的解决办法?我自己用carryforward还有其他类似的命令,做出来仍然是主楼里截图的结果,即无法填充到其他只点击了商品A但没下单的用户在3.31号的折扣信息

地板
黃河泉 在职认证  发表于 2020-8-18 11:12:24
虾滑真好吃 发表于 2020-8-18 10:22
请问黄老师是否有好的解决办法?我自己用carryforward还有其他类似的命令,做出来仍然是主楼里截图的结果 ...
你的问题太复杂,我看不懂 (我觉得我慢慢老了,太长或复杂的问题读起来较吃力,呵呵)!

7
DΘstinyじò 发表于 2020-8-18 12:27:35
虾滑真好吃 发表于 2020-8-17 21:44
谢谢您!我试了一下,还是和我之前做的结果一样,只能匹配到单个用户他orderdate和clickdate相等的时候的 ...
是吗?想要的数据是在这个mean_discount变量里面,我理解就是只要一个商品有一个下单时间对应的平均折扣信息,那么在相应的点击时间里点击该商品的所有用户都匹配这一折扣信息,是不是?我用你的示例数据跑出来的结果是下面。(假设保存你的示例数据aa1.dta)
  1. * Example generated by -dataex-. To install: ssc install dataex
  2. clear
  3. input double(clickdate mean_discount) str10(sku_id user_id) double orderdate float direct_discount_per_unit byte _merge
  4. 21249 20 "00104dbcd7" "51f6ad1e2a"     .  . 3
  5. 21250 20 "00104dbcd7" "34c624705f"     .  . 3
  6. 21250 20 "00104dbcd7" "627f2d92ab"     .  . 3
  7. 21251 20 "00104dbcd7" "45383bcaf4"     .  . 3
  8. 21256 20 "00104dbcd7" "d1261c4f1a"     .  . 3
  9. 21257 20 "00104dbcd7" "6b24b41f01" 21257 20 3
  10. 21257 20 "00104dbcd7" "42f1fe6e8a" 21256 20 3
  11. 21263 20 "00104dbcd7" "b7489ac487"     .  . 3
  12. 21269 20 "00104dbcd7" "92930db053" 21271 20 3
  13. 21270 20 "00104dbcd7" "d00acca3f3" 21270 20 3
  14. 21271 20 "00104dbcd7" "92930db053" 21271 20 3
  15. 21271 20 "00104dbcd7" "92930db053" 21271 20 3
  16. 21274 20 "00104dbcd7" "546e95d5ac"     .  . 3
  17. 21244  . "00104dbcd7" "7aedc11fb7"     .  . 2
  18. 21245  . "00104dbcd7" "0020bc07df"     .  . 2
  19. 21245  . "00104dbcd7" "dddd850d2f"     .  . 2
  20. 21246  . "00104dbcd7" "08410557e2"     .  . 2
  21. 21247  . "00104dbcd7" "29b38385d2"     .  . 2
  22. 21249 20 "00104dbcd7" "8005881b3f" 21249 20 3
  23. 21249 20 "00104dbcd7" "0d360a51a7" 21251 20 3
  24. 21251 20 "00104dbcd7" "2d32e918d6"     .  . 3
  25. 21251 20 "00104dbcd7" "bb7c828e74"     .  . 3
  26. 21251 20 "00104dbcd7" "78afb804d5"     .  . 3
  27. 21253  . "00104dbcd7" "6418488832"     .  . 2
  28. 21253  . "00104dbcd7" "d33aae81ed" 21250 20 2
  29. 21253  . "00104dbcd7" "7f643c4494"     .  . 2
  30. 21255  . "00104dbcd7" "ab8606dfe1"     .  . 2
  31. 21255  . "00104dbcd7" "9c95553c58"     .  . 2
  32. 21257 20 "00104dbcd7" "e9d97606e3"     .  . 3
  33. 21257 20 "00104dbcd7" "ab4a91dff4"     .  . 3
  34. 21258  . "00104dbcd7" "630699ed68"     .  . 2
  35. 21258  . "00104dbcd7" "f8f2c7a704"     .  . 2
  36. 21258  . "00104dbcd7" "f67628079a"     .  . 2
  37. 21258  . "00104dbcd7" "3118cdd0a8" 21257 20 2
  38. 21259  . "00104dbcd7" "951d5909dc"     .  . 2
  39. 21259  . "00104dbcd7" "eb361c7ab3"     .  . 2
  40. 21261  . "00104dbcd7" "ab2bc31c41"     .  . 2
  41. 21261  . "00104dbcd7" "fa80d3736a"     .  . 2
  42. 21261  . "00104dbcd7" "96b657568f"     .  . 2
  43. 21263 20 "00104dbcd7" "2005aad556"     .  . 3
  44. 21264  . "00104dbcd7" "58877da43e"     .  . 2
  45. 21264  . "00104dbcd7" "a6906b5d2c"     .  . 2
  46. 21264  . "00104dbcd7" "221de94d82" 21263 20 2
  47. 21267  . "00104dbcd7" "95108b339e"     .  . 2
  48. 21267  . "00104dbcd7" "d7001d5ab5"     .  . 2
  49. 21269 20 "00104dbcd7" "c7f569a403"     .  . 3
  50. 21269 20 "00104dbcd7" "c340c63382" 21269 20 3
  51. 21272  . "00104dbcd7" "51d3aef1d6" 21250 20 2
  52. 21273  . "00104dbcd7" "2db2516659"     .  . 2
  53. 21274 20 "00104dbcd7" "3157c3fe59"     .  . 3
  54. 21274 20 "00104dbcd7" "c958feca57"     .  . 3
  55. 21274 20 "00104dbcd7" "49c7063c7b" 21274 20 3
  56. end
  57. format %td clickdate
  58. format %td orderdate
  59. label values _merge _merge
  60. label def _merge 2 "using only (2)", modify
  61. label def _merge 3 "matched (3)", modify
复制代码
看mean_discount变量,缺失值是因为没有点击时间没有对应的下单时间,因而匹配不到均值折扣信息。

8
DΘstinyじò 发表于 2020-8-18 12:31:19
黃河泉 发表于 2020-8-18 08:08
建议用远都不要用 merge "m:m" ...。
好的,黄老师,学习了。一般我也不用,主数据里面同一天的均值折扣是一样的,就偷懒没有删除重复值,用了m:m,嘿嘿。

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jltj
拉您入交流群
GMT+8, 2025-12-12 14:50