楼主: akalius
1992 13

请教一个多多合并问题 [推广有奖]

  • 10关注
  • 3粉丝

讲师

48%

还不是VIP/贵宾

-

威望
0
论坛币
4168 个
通用积分
9.1543
学术水平
4 点
热心指数
6 点
信用等级
6 点
经验
7832 点
帖子
261
精华
0
在线时间
605 小时
注册时间
2009-7-22
最后登录
2024-4-9

楼主
akalius 学生认证  发表于 2017-3-24 11:27:18 |只看作者 |坛友微信交流群|倒序 |AI写论文
100论坛币
把辅助数据集中的月份加到主数据集,主数据集所有变量取值不变保留

主数据集
comayearqtrcombvarm
阿里

2014

1

顺丰

1

阿里

2014

1

圆通

1.2

阿里

2014

2

圆通

2

阿里

2014

3

圆通

3

阿里

2015

1

圆通

4

阿里

2015

2

中通

5

京东

2014

1

顺丰

6

京东

2014

2

顺丰

7

京东

2014

3

顺丰

8

京东

2014

4

申通

9

京东

2015

1

申通

10




辅助

combyearqtrmonthvaravarb
顺丰

2013

4

12

1

2

顺丰

2014

1

1

2

3

顺丰

2014

1

2

3

4

顺丰

2014

1

3

4

5

顺丰

2014

2

4

5

6

顺丰

2014

2

5

6

7

顺丰

2014

2

6

7

8

顺丰

2014

3

7

8

9

顺丰

2014

3

8

9

10

顺丰

2014

3

9

10

11

顺丰

2014

4

10

11

12

顺丰

2014

4

11

12

13

顺丰

2014

4

12

13

14

圆通

2014

1

1

14

15

圆通

2014

1

2

15

16

圆通

2014

1

3

16

17

圆通

2014

2

4

17

18

圆通

2014

2

5

18

19

圆通

2014

2

6

19

20

圆通

2014

3

7

20

21

圆通

2014

3

8

21

22

圆通

2014

3

9

22

23

圆通

2014

4

10

23

24

圆通

2014

4

11

24

25

圆通

2014

4

12

25

26

圆通

2015

1

1

26

27

圆通

2015

1

2

27

28

圆通

2015

1

3

28

29




想得到类似

comayearqtrcombvarmmonthvaravarb
阿里

2014

1

顺丰

1

1

2

3

阿里

2014

1

顺丰

1

2

3

4

阿里

2014

1

顺丰

1

3

4

5

阿里

2014

1

圆通

1.2

1

14

15

阿里

2014

1

圆通

1.2

2

15

16

阿里

2014

1

圆通

1.2

3

16

17

阿里

2014

2

圆通

2

4

17

18

阿里

2014

2

圆通

2

5

18

19

阿里

2014

2

圆通

2

6

19

20


最佳答案

sonypam 查看完整内容

其实只是最后输出OutTable数据集中重新整理好顺序,你可以试试在SQL中把排序语句去掉看看结果。
关键词:month year BVAR Vara mont
沙发
sonypam 在职认证  发表于 2017-3-24 11:27:19 来自手机 |只看作者 |坛友微信交流群
akalius 发表于 2017-3-26 16:21
为什么一定要用index1 and index2 呢    在排序中感觉没有体现什么作用
其实只是最后输出OutTable数据集中重新整理好顺序,你可以试试在SQL中把排序语句去掉看看结果。

使用道具

藤椅
sq2008 发表于 2017-3-24 11:44:09 |只看作者 |坛友微信交流群
有点难,期待高手解决!!

使用道具

对两个数据及关于comb year qtr排序,data c;merge a(in=a) b(in=b);by comb year qtr;run;类似的,具体细节自己调试一下应该差不多吧。。。不过不方便从操作所以也不是很确定

使用道具

报纸
zwnSAS121 发表于 2017-3-24 13:58:39 |只看作者 |坛友微信交流群
  1. data main;
  2. input coma$        year qtr comb$ varm;
  3. cards;
  4. 阿里         2014 1 顺丰 1
  5. 阿里         2014 1 圆通 1.2
  6. 阿里         2014 2 圆通 2
  7. 阿里         2014 3 圆通 3
  8. 阿里         2015 1 圆通 4
  9. 阿里         2015 2 中通 5
  10. 京东         2014 1 顺丰 6
  11. 京东         2014 2 顺丰 7
  12. 京东         2014 3 顺丰 8
  13. 京东         2014 4 申通 9
  14. 京东         2015 1 申通 10
  15. ;
  16. run;

  17. data auxi;
  18. input comb$        year month qtr vara varb;
  19. datalines;
  20. 顺丰         2013 4 12 1 2
  21. 顺丰         2014 1 1 2 3
  22. 顺丰         2014 1 2 3 4
  23. 顺丰         2014 1 3 4 5
  24. 顺丰         2014 2 4 5 6
  25. 顺丰         2014 2 5 6 7
  26. 顺丰         2014 2 6 7 8
  27. 顺丰         2014 3 7 8 9
  28. 顺丰         2014 3 8 9 10
  29. 顺丰         2014 3 9 10 11
  30. 顺丰         2014 4 10 11 12
  31. 顺丰         2014 4 11 12 13
  32. 顺丰         2014 4 12 13 14
  33. 圆通         2014 1 1 14 15
  34. 圆通         2014 1 2 15 16
  35. 圆通         2014 1 3 16 17
  36. 圆通         2014 2 4 17 18
  37. 圆通         2014 2 5 18 19
  38. 圆通         2014 2 6 19 20
  39. 圆通         2014 3 7 20 21
  40. 圆通         2014 3 8 21 22
  41. 圆通         2014 3 9 22 23
  42. 圆通         2014 4 10 23 24
  43. 圆通         2014 4 11 24 25
  44. 圆通         2014 4 12 25 26
  45. 圆通         2015 1 1 26 27
  46. 圆通         2015 1 2 27 28
  47. 圆通         2015 1 3 28 29
  48. ;

  49. proc sql noprint;
  50. create table wanted as
  51. select
  52. b.month,
  53. a.*
  54. from main as a,
  55.      auxi as b
  56. where a.comb=b.comb
  57. and   a.year=b.year
  58. and   a.qtr=b.qtr
  59. ;
  60. quit;
复制代码

使用道具

地板
akalius 学生认证  发表于 2017-3-24 19:56:11 |只看作者 |坛友微信交流群
zwnSAS121 发表于 2017-3-24 13:58
ERROR: 用“等于 (=)”的表达式具有不同数据类型的组件。

使用道具

7
wang1839 在职认证  发表于 2017-3-24 22:27:15 |只看作者 |坛友微信交流群
楼上数据类型搞错了 comb设成字符型,YEAR和QTR设成数值型即可

使用道具

8
wang1839 在职认证  发表于 2017-3-24 22:28:10 |只看作者 |坛友微信交流群
进击的小瓶盖 发表于 2017-3-24 13:16
对两个数据及关于comb year qtr排序,data c;merge a(in=a) b(in=b);by comb year qtr;run;类似的, ...
多对多不能MERGE

使用道具

9
akalius 学生认证  发表于 2017-3-25 10:00:15 |只看作者 |坛友微信交流群
wang1839 发表于 2017-3-24 22:27
楼上数据类型搞错了 comb设成字符型,YEAR和QTR设成数值型即可
调整了  结果不对   还是不行    我觉得这个好像没用sql      我还是用个宏循环一下吧

使用道具

10
sonypam 在职认证  发表于 2017-3-26 11:27:15 |只看作者 |坛友微信交流群
Multiple to multiple merge cannot be done using SAS data step (actually it can be done, but the result will be unexpected), so normally, when dealing with multiple to multiple merge, we will use sql, please see the detailed code in below:

data main;
        input coma$ year qtr comb$ varm;
        index1 = _N_; /*Used for ordering data in OutTable*/
cards;
阿里         2014 1 顺丰 1
阿里         2014 1 圆通 1.2
阿里         2014 2 圆通 2
阿里         2014 3 圆通 3
阿里         2015 1 圆通 4
阿里         2015 2 中通 5
京东         2014 1 顺丰 6
京东         2014 2 顺丰 7
京东         2014 3 顺丰 8
京东         2014 4 申通 9
京东         2015 1 申通 10
;
run;

data auxi;
        input comb$ year qtr month vara varb;
        index2 = _N_; /*Used for ordering data in OutTable*/
datalines;
顺丰         2013 4 12 1 2
顺丰         2014 1 1 2 3
顺丰         2014 1 2 3 4
顺丰         2014 1 3 4 5
顺丰         2014 2 4 5 6
顺丰         2014 2 5 6 7
顺丰         2014 2 6 7 8
顺丰         2014 3 7 8 9
顺丰         2014 3 8 9 10
顺丰         2014 3 9 10 11
顺丰         2014 4 10 11 12
顺丰         2014 4 11 12 13
顺丰         2014 4 12 13 14
圆通         2014 1 1 14 15
圆通         2014 1 2 15 16
圆通         2014 1 3 16 17
圆通         2014 2 4 17 18
圆通         2014 2 5 18 19
圆通         2014 2 6 19 20
圆通         2014 3 7 20 21
圆通         2014 3 8 21 22
圆通         2014 3 9 22 23
圆通         2014 4 10 23 24
圆通         2014 4 11 24 25
圆通         2014 4 12 25 26
圆通         2015 1 1 26 27
圆通         2015 1 2 27 28
圆通         2015 1 3 28 29
;
run;

proc sql;
        create table OutTable(drop=index1) as
        select main.*, auxi.vara, auxi.varb
        from main, auxi
        where main.comb = auxi.comb and main.year = auxi.year and main.qtr = auxi.qtr
        order by main.index1, auxi.index2;
quit;

使用道具

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

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

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

GMT+8, 2024-4-20 00:52