楼主: lizziezeng
11005 9

[求助]如何将数据分类排序后加上相应的序号? [推广有奖]

  • 0关注
  • 0粉丝

本科生

6%

还不是VIP/贵宾

-

威望
0
论坛币
360 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
881 点
帖子
54
精华
0
在线时间
54 小时
注册时间
2008-8-2
最后登录
2017-6-18

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币

有以下数据集:

id entr money
10001 a 23
10001 b 11
10002 b 35
10002 c 36
10003 a 56
10003 c 48  
如何将money按照id分类排序  并加上一列序号,结果变成

id entr money index
10001 b 11  1
10001 a 23  2
10002 b 35  1
10002 c 36  2
10003 c 48  1  
10003 a 56  2
请问哪位大虾知道? 帮忙解决下这个问题

二维码

扫码加我 拉你入群

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

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

关键词:数据分类 money Index Mon IND 序号 数据分类

回帖推荐

yongyitian 发表于3楼  查看完整内容

看看是这样吗?data lizzie;   input id $5. @7 entr $1. money;datalines;10001 a 2310001 b 1110002 b 3510002 c 3610003 a 5610003 c 48;run;proc sort data=lizzie out=lizzie_sort;    by id entr;run;data lizzie_idx;    set lizzie_sort;       by id;    retain idx;    if first.id then idx=1;    ...

本帖被以下文库推荐

沙发
lizziezeng 发表于 2009-3-19 19:02:00 |只看作者 |坛友微信交流群

我知道 proc rank 有这个功能,但是前提一定是 排序的那一列(money)的变量值是唯一的,如果是有相同的两个值又怎么办?

比如:10001 b 11  1
      10001 a 23  2 
      10002 b 35  1
      10002 c 35  2
      10003 c 48  1  
      10003 a 56  2

本文来自: 人大经济论坛(http://www.pinggu.org) 详细出处参考:https://bbs.pinggu.org/thread-431760-1-1.html

使用道具

藤椅
yongyitian 发表于 2009-3-19 21:56:00 |只看作者 |坛友微信交流群

看看是这样吗?
data lizzie;
   input id $5. @7 entr $1. money;
datalines;
10001 a 23
10001 b 11
10002 b 35
10002 c 36
10003 a 56
10003 c 48
;run;

proc sort data=lizzie out=lizzie_sort;
    by id entr;
run;
data lizzie_idx;
    set lizzie_sort;
       by id;
    retain idx;
    if first.id then idx=1;
    else idx+1;
run;
proc print data=lizzie_idx;
run;

output
Obs     id     entr    money    idx
1     10001     a        23      1
2     10001     b        11      2
3     10002     b        35      1
4     10002     c        36      2
5     10003     a        56      1
6     10003     c        48      2

已有 2 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
bakoll + 3 + 3 精彩帖子
醉生梦 + 5 + 5 + 5 热心帮助其他会员

总评分: 经验 + 3  论坛币 + 3  学术水平 + 5  热心指数 + 5  信用等级 + 5   查看全部评分

使用道具

板凳
xuwei2007 发表于 2009-3-19 22:20:00 |只看作者 |坛友微信交流群

    

[此贴子已经被作者于2009-3-19 22:28:08编辑过]

使用道具

报纸
lizziezeng 发表于 2009-3-19 22:35:00 |只看作者 |坛友微信交流群

哈哈  就是yangyitian那种方法。。谢谢各位大虾了  谢谢谢谢

使用道具

地板
cybericsson 发表于 2009-3-22 06:54:00 |只看作者 |坛友微信交流群
学习。 多谢

使用道具

7
游动的鱼儿 发表于 2012-1-12 17:07:45 |只看作者 |坛友微信交流群

使用道具

8
游动的鱼儿 发表于 2012-1-12 17:07:50 |只看作者 |坛友微信交流群

使用道具

9
xwan5667 发表于 2014-8-18 02:00:33 |只看作者 |坛友微信交流群
yongyitian 发表于 2009-3-19 21:56
看看是这样吗?data lizzie;   input id $5. @7 entr $1. money;datalines;10001 a 2310001 b 11 ...
您好,在论坛上看见您的帖子太开心了,我也遇到了相似的难题。特向您请教~~

我的数据是医院报销数据,每一条数据中有很多变量,其中之一是诊断(diagn)。数据结构如下:
year  county   name  age address   diagn  expen  los....
2012   1         x1      23    xxxxxx     分娩    1234    7
2012   1         x1      56    xxxxxx     肺炎    1234    7
2013   1         x1      47    xxxxxx     分娩    1234    7
2012   1         x1      23    xxxxxx     胃癌    1234    7
2012   1         x1      25    xxxxxx     阑尾炎 1234    7
2012   1         x1      28    xxxxxx     分娩    1234    7
2012   1         x1      28    xxxxxx     肺炎    1234    7
2012   1         x1      23    xxxxxx     胃癌    1234    7
2012   1         x1      23    xxxxxx     胃癌    1234    7
我想实现的是:
1.将诊断按照频数从大到小排序,有"编号+频率+累计频率"这几个结果,不知应该如何实现?
  下例中的结果想要输出为
       编号  diagn   N     fre       af
          1    分娩      4   40%  40%
          2    胃癌      3   30%  70%
          3    肺炎      2   20%  90%
          4    阑尾炎   1   10%    1
2. 在stata中,按照编号替换diagn为diagn1

我想要的结构是
year  county   name  age address   diagn diagn1 expen  los....
2012   1         x1      23    xxxxxx     分娩    1         1234    7
2012   1         x1      56    xxxxxx     肺炎    3         1234    7
2013   1         x1      47    xxxxxx     分娩    1         1234    7
2012   1         x1      23    xxxxxx     胃癌    2         1234    7
2012   1         x1      25    xxxxxx     阑尾炎 4         1234    7
2012   1         x1      28    xxxxxx     分娩    1          1234    7
2012   1         x1      28    xxxxxx     肺炎    3          1234    7
2012   1         x1      23    xxxxxx     胃癌    2          1234    7
2012   1         x1      23    xxxxxx     胃癌    2           1234    7



期待您的指导与回复~

使用道具

10
yongyitian 发表于 2014-8-18 07:37:59 |只看作者 |坛友微信交流群
  1. data have;
  2. length diagn $15.;
  3. input year  county   name $2.  age diagn :$15.  expen  los;
  4. datalines;
  5. 2012 1 x1  23  ChildBirth   1234 7
  6. 2012 1 x1  24  ChildBirth   1234 7
  7. 2012 1 x1  56  Pneumonia    1234 7
  8. 2013 1 x1  47  ChildBirth   1234 7
  9. 2012 1 x1  23  Gastric      1234 7
  10. 2012 1 x1  25  Appendicitis 1234 7
  11. 2012 1 x1  28  ChildBirth   1234 7
  12. 2012 1 x1  28  Pneumonia    1234 7
  13. 2012 1 x1  23  Gastric   1234 7
  14. 2012 1 x1  23  Gastric   1234 7
  15. ; run;

  16. /* Question 1 */
  17. proc sort data=have out=have_sort;
  18.     by diagn;
  19. run;
  20. data want1;
  21.     set have_sort nobs=nobs;
  22.     by diagn;
  23.     if first.diagn then n=0;
  24.     n + 1;
  25.     if last.diagn then do;
  26.        freq_percent =  n/nobs;
  27.                  af = _n_/nobs;
  28.        output;
  29.     end;
  30.     format freq_percent af percent.;
  31. run;

  32. proc sort data=want1;
  33.    by descending  n;
  34. run;
  35. data want1;
  36.     set want1;
  37.         BianHao = _n_;
  38. run;

  39. /*
  40. 问题2,如果只是用数字替换diagn为diagn1,可以用format
  41. */
  42. proc format;
  43.     value $ diagn 'ChildBirth' = '1'
  44.                   'Gastric'    = '2'
  45.                    'Pneumonia' = '3'
  46.                 'Appendicitis' = '4';
  47. run;

  48. data want2;
  49.      set have;
  50.     diagn1 = put(diagn, diagn.);
  51. run;
复制代码

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-28 07:38