楼主: 朗啊朗
11750 13

[数据管理求助] stata如何对多个变量进行排序? [推广有奖]

  • 2关注
  • 0粉丝

本科生

48%

还不是VIP/贵宾

-

威望
0
论坛币
3008 个
通用积分
5.3721
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
2057 点
帖子
27
精华
0
在线时间
156 小时
注册时间
2016-2-1
最后登录
2023-7-30

楼主
朗啊朗 发表于 2019-12-24 20:31:42 |AI写论文
50论坛币
我想实现的数据处理过程是先让数据按疾病的大类排列好,再按药品的名称排列好,然后再按会员的id排列好,再然后是按日期排列好,最后算出日期间隔。我用gsort这个命令后面加4个变量,那日期这一列并没有按顺序排列好,详细的结果请看下面的例子;我用gsort命令后面只添加加id和order_time,虽然计算的日期间隔的结果没有负数,但这种算法不能排除同一个id在同一天购买了不同的药,所以结果好像也是会有问题的。我应该如何实现多变量的正确排序,求大神们指教!

---------------------- copy starting from the next line -----------------------
  1. * Example generated by -dataex-. To install: ssc install dataex
  2. clear
  3. input str44 product_name str36 account_id str19 order_time float observe
  4. "阿托伐他汀钙片(立普妥)" "000DBAC5-2235-423F-907E-A3FEEC7E2EC9" "2019-06-24 16:25:49"   0
  5. "阿托伐他汀钙片(立普妥)" "000DBAC5-2235-423F-907E-A3FEEC7E2EC9" "2019-06-24 16:25:33"  -3
  6. "阿托伐他汀钙片(立普妥)" "000DBAC5-2235-423F-907E-A3FEEC7E2EC9" "2019-06-21 12:11:02"   3
  7. "阿托伐他汀钙片(立普妥)" "000DBAC5-2235-423F-907E-A3FEEC7E2EC9" "2019-06-24 18:37:37"   0
  8. "阿托伐他汀钙片(立普妥)" "000DBAC5-2235-423F-907E-A3FEEC7E2EC9" "2019-06-24 16:25:39"   0
  9. "阿托伐他汀钙片(立普妥)" "000DBAC5-2235-423F-907E-A3FEEC7E2EC9" "2019-06-24 16:26:12"   0
  10. "阿托伐他汀钙片(立普妥)" "000DBAC5-2235-423F-907E-A3FEEC7E2EC9" "2019-06-24 16:25:57" -83
  11. "阿托伐他汀钙片(立普妥)" "000DBAC5-2235-423F-907E-A3FEEC7E2EC9" "2019-04-02 17:27:19" -26
  12. end
复制代码

------------------ copy up to and including the previous line ------------------




关键词:Stata 多个变量 tata generated including 统计 工具 决策 经济 stata数据管理

回帖推荐

震震果实 发表于13楼  查看完整内容

沙发
震震果实 发表于 2019-12-24 20:31:43
  1.         drop in 1/41             //将样本全部删除
  2.         save G,replace
  3.         forvalue i=1/2{          //两种疾病
  4.                 forvalue j=1/4{      //4种药品
  5.                 use cs,clear
  6.                 keep if s==`i' & p==`j'
  7.                 cap bys id:gen n=_n
  8.                 cap xtset id n
  9.                 cap bys id:gen t_t=F.t-t
  10.                 cap append using G
  11.                 cap save G,replace
  12.                 }
  13.         }
复制代码

藤椅
黃河泉 在职认证  发表于 2019-12-25 06:42:12
请说明你的变量的意义 (谁是谁?)!

板凳
朗啊朗 发表于 2019-12-25 08:57:34
黃河泉 发表于 2019-12-25 06:42
请说明你的变量的意义 (谁是谁?)!
product_name是药品名称,account_id是会员id,order_time是订单日期。我在问题里描述的疾病大类的变量没有放到举例的数据里。

报纸
朗啊朗 发表于 2019-12-25 09:21:11
我再详细描述一下我的数据结构。我拿的是某公司所有慢性病的用户购药的数据,大概有10几种慢性病,每种慢性病又有好多个不同的药品,我要计算的就是某个用户在一段时期内购买某种药品的复购天数的间隔。因为日期复购天数的计算只能局限在某个用户,所以必须先对慢性病进行排序,再对某类慢性病中的药品排序,再对购买该类药品的用户id排序,最后再对id当中的下单日期进行排序。我用了sort和gsort命令,都不能保证下单日期是按照先后顺序排列的,也就是我昨天问的问题

地板
黃河泉 在职认证  发表于 2019-12-25 10:22:18
朗啊朗 发表于 2019-12-25 09:21
我再详细描述一下我的数据结构。我拿的是某公司所有慢性病的用户购药的数据,大概有10几种慢性病,每种慢性 ...
很遗憾地,看了半天,我无法了解你的问题 (虽然我相信这用 Stata 处理应该不难)。

7
震震果实 发表于 2019-12-27 13:09:52
  1. [CODE]
  2. * Example generated by -dataex-. To install: ssc install dataex
  3. clear
  4. input str1 sickness str32 product_name str36 account_id str19 order_time
  5. "A" "阿托伐他汀钙片A" "004E1FB5-3AA6-4211-89C6-8D43EB6A5C9F" "2019-10-29 15:27:12"
  6. "A" "阿托伐他汀钙片A" "004E1FB5-3AA6-4211-89C6-8D43EB6A5C9F" "2019-10-29 15:26:13"
  7. "A" "阿托伐他汀钙片A" "004E1FB5-3AA6-4211-89C6-8D43EB6A5C9F" "2019-10-29 15:27:42"
  8. "A" "阿托伐他汀钙片B" "004E1FB5-3AA6-4211-89C6-8D43EB6A5C9F" "2019-10-29 15:28:13"
  9. "A" "阿托伐他汀钙片B" "004E1FB5-3AA6-4211-89C6-8D43EB6A5C9F" "2019-10-29 15:31:43"
  10. "A" "阿托伐他汀钙片B" "004E1FB5-3AA6-4211-89C6-8D43EB6A5C9F" "2019-10-29 15:29:12"
  11. "A" "阿托伐他汀钙片B" "00835E4F-6586-41AD-B8BC-21749E816C39" "2019-07-31 11:06:40"
  12. "B" "阿托伐他汀钙片A" "00835E4F-6586-41AD-B8BC-21749E816C39" "2019-07-31 11:26:00"
  13. "B" "阿托伐他汀钙片A" "00835E4F-6586-41AD-B8BC-21749E816C39" "2019-07-31 11:50:18"
  14. "B" "阿托伐他汀钙片A" "00910CA4-F692-4D4A-923F-BF29E2774D37" "2019-08-30 19:32:44"
  15. "B" "阿托伐他汀钙片B" "000DBAC5-2235-423F-907E-A3FEEC7E2EC9" "2019-06-21 12:11:02"
  16. "B" "阿托伐他汀钙片B" "000DBAC5-2235-423F-907E-A3FEEC7E2EC9" "2019-06-24 18:37:37"
  17. "B" "阿托伐他汀钙片C" "000DBAC5-2235-423F-907E-A3FEEC7E2EC9" "2019-06-24 16:26:12"
  18. "B" "阿托伐他汀钙片C" "000DBAC5-2235-423F-907E-A3FEEC7E2EC9" "2019-06-24 16:25:57"
  19. "B" "阿托伐他汀钙片C" "00835E4F-6586-41AD-B8BC-21749E816C39" "2019-07-31 11:50:19"
  20. "B" "阿托伐他汀钙片C" "00835E4F-6586-41AD-B8BC-21749E816C39" "2019-07-31 11:18:43"
  21. "B" "阿托伐他汀钙片C" "00835E4F-6586-41AD-B8BC-21749E816C39" "2019-07-31 11:50:22"
  22. "B" "阿托伐他汀钙片C" "00835E4F-6586-41AD-B8BC-21749E816C39" "2019-08-18 09:41:01"
  23. "B" "阿托伐他汀钙片C" "00835E4F-6586-41AD-B8BC-21749E816C39" "2019-08-19 16:38:26"
  24. "B" "阿托伐他汀钙片C" "00835E4F-6586-41AD-B8BC-21749E816C39" "2019-08-19 16:38:51"
  25. "B" "阿托伐他汀钙片C" "00835E4F-6586-41AD-B8BC-21749E816C39" "2019-08-19 16:38:32"
  26. "B" "阿托伐他汀钙片C" "00835E4F-6586-41AD-B8BC-21749E816C39" "2019-10-08 17:45:05"
  27. "B" "阿托伐他汀钙片D" "000DBAC5-2235-423F-907E-A3FEEC7E2EC9" "2019-04-02 17:27:19"
  28. "B" "阿托伐他汀钙片D" "000DBAC5-2235-423F-907E-A3FEEC7E2EC9" "2019-06-24 16:25:49"
  29. "B" "阿托伐他汀钙片D" "000DBAC5-2235-423F-907E-A3FEEC7E2EC9" "2019-06-24 16:25:39"
  30. "B" "阿托伐他汀钙片D" "000DBAC5-2235-423F-907E-A3FEEC7E2EC9" "2019-06-24 16:25:33"
  31. "B" "阿托伐他汀钙片D" "00835E4F-6586-41AD-B8BC-21749E816C39" "2019-08-21 13:37:53"
  32. "B" "阿托伐他汀钙片D" "00835E4F-6586-41AD-B8BC-21749E816C39" "2019-10-17 19:01:10"
  33. "B" "阿托伐他汀钙片D" "00835E4F-6586-41AD-B8BC-21749E816C39" "2019-10-26 11:21:35"
  34. "B" "阿托伐他汀钙片D" "00835E4F-6586-41AD-B8BC-21749E816C39" "2019-10-30 15:49:41"
  35. "B" "阿托伐他汀钙片D" "00835E4F-6586-41AD-B8BC-21749E816C39" "2019-11-09 18:00:28"
  36. "B" "阿托伐他汀钙片D" "00835E4F-6586-41AD-B8BC-21749E816C39" "2019-11-09 18:07:00"
  37. "B" "阿托伐他汀钙片D" "00835E4F-6586-41AD-B8BC-21749E816C39" "2019-11-13 21:35:09"
  38. "B" "阿托伐他汀钙片D" "00835E4F-6586-41AD-B8BC-21749E816C39" "2019-11-19 15:04:16"
  39. "B" "阿托伐他汀钙片D" "00835E4F-6586-41AD-B8BC-21749E816C39" "2019-11-20 15:15:21"
  40. "B" "阿托伐他汀钙片D" "00835E4F-6586-41AD-B8BC-21749E816C39" "2019-11-21 16:11:15"
  41. "B" "阿托伐他汀钙片D" "00835E4F-6586-41AD-B8BC-21749E816C39" "2019-12-16 20:19:33"
  42. "B" "阿托伐他汀钙片D" "00835E4F-6586-41AD-B8BC-21749E816C39" "2019-12-17 18:16:08"
  43. "B" "阿托伐他汀钙片D" "00835E4F-6586-41AD-B8BC-21749E816C39" "2019-12-17 17:57:27"
  44. "B" "阿托伐他汀钙片D" "00835E4F-6586-41AD-B8BC-21749E816C39" "2019-12-19 16:58:13"
  45. "B" "阿托伐他汀钙片D" "00910CA4-F692-4D4A-923F-BF29E2774D37" "2019-12-19 16:58:13"
  46. end
复制代码

[/code]

8
震震果实 发表于 2019-12-27 13:13:37
  1. encode sickness,gen (s)
  2. encode product_name ,gen (p)
  3. encode account_id ,gen (id)
  4. gen D=substr(order_time,1,10)
  5. gen t=date(D,"YMD")
  6. sort s p id t
  7. save cs,replace
复制代码

9
朗啊朗 发表于 2020-1-3 20:26:24
震震果实 发表于 2019-12-27 13:16
非常感谢您的回复!不过您的方法好像改变了原来的数据。我自己探索了一下,好像可以这么写代码:
gsort large_class product_name account_id eventtime
by large_class product_name account_id:gen gap=eventdate[_n]-eventdate[_n-1]

10
朗啊朗 发表于 2020-1-3 21:24:48
震震果实 发表于 2019-12-24 20:31
非常感谢您回答了我之前提的两个问题!我有一个问题是和之前的您帮助我回答的两个问题相关的,我已经会计算上下两行的时间间隔,也学会了如何用gsort功能来限定在某一个用户ID内计算时间间隔,但是很麻烦的是,我不知道如何把两次相减的结果对应地放在“减数”的那个日期的那一行,您之前是帮助我解决了这个问题的。您的代码是:
gen time=substr( order_time,1,10 )
gen t=date( time,"YMD")
encode account_id,gen(id)
bys id:gen n=_n
xtset id n
bys id:gen tt=t-L.t

我尝试了在您这个代码上在“bys id:”插入class、product name,但是我运行不出想要的结果。

我重新放上来一个例子,我想达到的目标就是把下面的gap这一个字段往上提一行,让这个数字对应到减数那一行。您知道应该如何改您的代码吗?

copy starting from the next line -----------------------
  1. * Example generated by -dataex-. To install: ssc install dataex
  2. clear
  3. input str18 large_class str120 product_name str36 account_id float(eventdate gap)
  4. "呼吸道用药" "丙酸氟替卡松吸入气雾剂(辅舒酮)"          "65927B82-AB12-4F3F-912C-F6014B4679A6" 21851   .
  5. "呼吸道用药" "丙酸氟替卡松吸入气雾剂(辅舒酮)"          "81A794D0-1685-48AC-BE97-51240834F304" 21857   .
  6. "呼吸道用药" "丙酸氟替卡松吸入气雾剂(辅舒酮)"          "AD9E662B-A910-4983-801B-30ABA0CB02C1" 21573   .
  7. "呼吸道用药" "丙酸氟替卡松吸入气雾剂(辅舒酮)"          "D68D7931-757E-4EBE-B1FD-FB0B82A95E50" 21533   .
  8. "呼吸道用药" "丙酸氟替卡松吸入气雾剂(辅舒酮)"          "D68D7931-757E-4EBE-B1FD-FB0B82A95E50" 21605  72
  9. "呼吸道用药" "丙酸氟替卡松吸入气雾剂(辅舒酮)"          "D68D7931-757E-4EBE-B1FD-FB0B82A95E50" 21733 128
  10. "呼吸道用药" "丙酸氟替卡松吸入气雾剂(辅舒酮)"          "F7CA44B7-14DE-4D23-A27A-AFAB1CAFE195" 21851   .
  11. "呼吸道用药" "二母宁嗽片(同仁堂)"                            "25760C85-0C9C-465C-9557-37A35C2715D8" 21503   .
  12. "呼吸道用药" "京都念慈菴蜜炼川贝枇杷膏(京都念慈菴)" "0414075F-B5F3-4A33-AE18-269A59281B5B" 21399   .
  13. "呼吸道用药" "京都念慈菴蜜炼川贝枇杷膏(京都念慈菴)" "58C8CF84-B12A-4EBE-AB80-329C876E176B" 21511   .
  14. "呼吸道用药" "京都念慈菴蜜炼川贝枇杷膏(京都念慈菴)" "6C385475-064F-4EFA-99A2-75AF2EF2E79F" 21811   .
  15. "呼吸道用药" "京都念慈菴蜜炼川贝枇杷膏(京都念慈菴)" "7849B310-B488-449E-87D8-690BBB51092B" 21848   .
  16. "呼吸道用药" "京都念慈菴蜜炼川贝枇杷膏(京都念慈菴)" "A8CA0015-4AB8-4053-88A3-FC1B5CB21CB6" 21603   .
  17. "呼吸道用药" "京都念慈菴蜜炼川贝枇杷膏(京都念慈菴)" "A8CA0015-4AB8-4053-88A3-FC1B5CB21CB6" 21832 229
  18. end
  19. format %td eventdate
复制代码
------------------ copy up to and including the previous line ------------------

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

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