楼主: gaotao0727
298 2

[问答] 数据集变量值编号问题 [推广有奖]

  • 1关注
  • 9粉丝

副教授

70%

还不是VIP/贵宾

-

威望
0
论坛币
592 个
学术水平
18 点
热心指数
18 点
信用等级
12 点
经验
27500 点
帖子
826
精华
0
在线时间
823 小时
注册时间
2011-8-8
最后登录
2018-8-15

gaotao0727 发表于 2018-8-10 10:42:05 |显示全部楼层
  1. data test;
  2.   input apply_no $ no;
  3.   cards;
  4. 01 1
  5. 01 2
  6. 01 3
  7. 01 0
  8. 01 1
  9. 01 2
  10. 01 3
  11. 01 1
  12. 01 2
  13. 02 0
  14. 02 1
  15. 02 2
  16. ;
  17. run;
复制代码
如上是数据集,每个appl_no中第一个一起出现的1,2,3...对应赋值为1,下一个一起出现的1,2,3...对应赋值为2,以此类推
希望得到的结果是:
  1. 01 1 1
  2. 01 2 1
  3. 01 3 1
  4. 01 0 0
  5. 01 1 2
  6. 01 2 2
  7. 01 3 2
  8. 01 1 3
  9. 01 2 3
  10. 02 0 0
  11. 02 1 1
  12. 02 2 1
复制代码
谢谢各位大神指点!

关键词:数据集

衣带渐宽终不悔,为伊消得人憔悴~~
stata SPSS
l1i2n3i4n5g 在职认证  发表于 2018-8-10 17:11:27 |显示全部楼层
本帖最后由 l1i2n3i4n5g 于 2018-8-10 23:04 编辑

data test;
  input apply_no $ no;
  cards;
01 1
01 2
01 3
01 0
01 1
01 2
01 3
01 1
01 2
02 0
02 1
02 2
;
run;

data test1;
   set test;
   id=_n_;
run;

proc sort data=test1;
   by apply_no no;
run;

data test2;
   retain num;
   set test1;
   by apply_no no;
   if no=1 then do;
      if first.no then num=1;
      else num+1;
   end;
   else call missing(num);
run;

proc sort data=test2;
   by id;
run;

data want;
   set test2;
   retain tmp tmp_on;
   if not missing(num) then do;
      tmp=num;
      tmp_on=1;
   end;
   if missing(num) and dif(no)^=1 then tmp_on=0;
   if missing(num) then num=(tmp*tmp_on)+(no*(1-tmp_on));
   keep apply_no no num;
run;
回复

使用道具 举报

gaotao0727 发表于 昨天 18:14 |显示全部楼层
l1i2n3i4n5g 发表于 2018-8-10 17:11
data test;
  input apply_no $ no;
  cards;
太有才了,这办法都想出来了,非常感谢!!
回复

使用道具 举报

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

GMT+8, 2018-8-16 10:23