楼主: winddr
6907 17

SAS 数据横向合并问题!求助! [推广有奖]

11
wpfwxn 发表于 2015-3-2 18:36:28
好吧,仔细研究了一下,双set也不好实现。
data a;
  set a;
  obs = _N_;
run;

proc sort data =a; by name; run;

data a;
        set a; by name;
        if first.name then vobs = 0;
    vobs + 1;
run;

proc sort data = b; by name; run;
data b;
        set b; by name;
        if first.name then vobs = 0;
    vobs + 1;
run;

proc sql noprint;
   create table c as
     select a.name,b.v1, b.v2, a.v3, a.v4, a.obs
     from a left join b
     on a.name = b.name and a.vobs = b.vobs
    order by obs ;
quit;

data c(drop = obs);
  set c; by obs;
  if first.obs then output;
run;

把a先去掉观测4,然后merge,再加上观测4,再恢复顺序,也可以实现

12
wpfwxn 发表于 2015-3-2 19:27:01
用merge实现:

data a;
  set a;
  obs = _N_;
  if name = 'orissa' then obs1 = 999;
  else obs1 = obs;
run;

proc sort data = a ; by obs1; run;


data c;
  merge b a;
  drop obs1;
run;

proc sort data = c out= d(drop = obs); by obs; run;

13
wpfwxn 发表于 2015-3-2 19:56:47
利用双set过程实现:

data a(index=(namev = (name vobs)));
  set a;
  length namelst $2000;
  retain namelst;
  namelst = catx('', namelst, name);
  vobs = count(namelst, name, 't');
  drop namelst;
run;

data b(index=(namev = (name vobs)));
  set b;
  length namelst $2000;
  retain namelst;
  namelst = catx('', namelst, name);
  vobs = count(namelst, name, 't');
  drop namelst;
run;

data c;
  retain name variable1-variable4;
  set a ;
  set b key = namev;
  if _iorc_ eq 0 then do;
     _iorc_=0;
     _error_=0;
  end;
  else do;
    _iorc_=0;
    _error_=0;
    variable1 = .;
    variable2 = .;
  end;
  drop vobs;
run;

14
天穹下 发表于 2015-3-2 20:16:27
  1. data m;
  2. input name$ v3 v4;
  3. cards;
  4. hirs1681        23        23
  5. hirs1681        443        21
  6. hirs1681        21        22
  7. orissa        4        1
  8. Purepixel        34        34
  9. virtuosoonline        33        34
  10. ndokceplok        21        22
  11. frontend        24        1
  12. virtuosoonline        3        4
  13. ftq        1        23
  14. ftq        2        24
  15. ftq        3        25
  16. ;
  17. data m2;
  18. input name$ v1 v2;
  19. cards;
  20. hirs1681        1        32
  21. hirs1681        2        22
  22. hirs1681        3        1
  23. Purepixel        4        34
  24. virtuosoonline        5        56
  25. ndokceplok        6        64
  26. frontend        7        32
  27. virtuosoonline        8        1
  28. ftq        22        2
  29. ;
  30. proc sort data=m;
  31. by name;
  32. proc sort data=m2;
  33. by name;
  34. run;
  35. data m;
  36. set m;
  37. by name;
  38. if first.name=1 then n=0;
  39. n+1;
  40. run;
  41. data m2;
  42. set m2;
  43. by name;
  44. if first.name=1 then n=0;
  45. n+1;
  46. run;
  47. data m3;
  48. merge m(in=a1) m2(in=a2);
  49. by name n;
  50. drop n;
  51. run;
复制代码
已有 1 人评分论坛币 收起 理由
admin_kefu + 100 热心帮助其他会员

总评分: 论坛币 + 100   查看全部评分

15
winddr 发表于 2015-3-2 21:16:34
天穹下 发表于 2015-3-2 20:16
谢谢您的回复,程序完美运行。

16
winddr 发表于 2015-3-2 22:25:58
wpfwxn 发表于 2015-3-2 19:56
利用双set过程实现:

data a(index=(namev = (name vobs)));
谢谢您的帮助!!!!

17
天穹下 发表于 2015-3-2 23:24:53
winddr 发表于 2015-3-2 21:16
谢谢您的回复,程序完美运行。
不客气。你有什么经典的笑话吗?来一个?谢谢!

18
winddr 发表于 2015-3-9 19:38:59
天穹下 发表于 2015-3-2 23:24
不客气。你有什么经典的笑话吗?来一个?谢谢!
帮我看看这个问题吧,多谢多谢!https://bbs.pinggu.org/thread-3604873-1-1.html

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-29 14:18