楼主: ybhk
12277 15

如何将多个数据集合并到一个数据集里 [推广有奖]

  • 0关注
  • 1粉丝

硕士生

2%

还不是VIP/贵宾

-

威望
0
论坛币
39 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
1115 点
帖子
84
精华
0
在线时间
94 小时
注册时间
2012-6-2
最后登录
2017-10-22

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
有几十个前缀相同的数据集,有什么简单的方法将他们merge 到一个数据集里吗?
二维码

扫码加我 拉你入群

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

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

关键词:数据集 Merge 相同的数据 如何

沙发
Tigflanker 发表于 2015-12-2 16:51:20 |只看作者 |坛友微信交流群
横向Merge还是纵向Set?,听你的口吻是要纵向Set到一块吧?
  1. data want;
  2.   set same_name:;
  3. run;
复制代码
横向Merge的话,要按照什么key连接?连接什么样的字段名?会否出现多对多情况?

使用道具

藤椅
孤单的我们 发表于 2015-12-2 17:31:11 |只看作者 |坛友微信交流群
  1. options noxwait noxsync;
  2. filename filelst pipe "dir ""&path"" /b ";/*&path为众多数据集的路径*/
  3. data filelist_;
  4.    infile filelst length=reclen ;
  5.    input name $varying1024. reclen ;
  6.    if scan(name,2,".") in ("sas7bdat") & index(name,'&text');/*&text为'相同前缀'*/
  7.    name=scan(name,1,".");
  8. run;

  9. data _null_;
  10.         set filelist_;
  11.         call symputx('max',_n_);
  12.         call symputx('data'||strip(put(_n_,best.)),name);
  13. run;

  14. %macro test(out=);
  15. %do i=1 %to &max;

  16. /*set或merge取决于你的数据集结构了*/
  17. data &out;
  18.         set %if %sysfunc(exist(&out,data)) %then &out; &&data&i;
  19. run;

  20. %end;
  21. %mend test;

  22. %test(out=myout)
复制代码

使用道具

板凳
ybhk 发表于 2015-12-2 17:46:31 |只看作者 |坛友微信交流群
Tigflanker 发表于 2015-12-2 16:51
横向Merge还是纵向Set?,听你的口吻是要纵向Set到一块吧?横向Merge的话,要按照什么key连接?连接什么样的 ...
横向merge 一对一

使用道具

报纸
木叶知秋 发表于 2015-12-2 19:17:57 |只看作者 |坛友微信交流群
直接merge不行吗?
  1. %macro prd;
  2.         %do i=1 %to 5;
  3.                 data test&i.;
  4.                         %do j=1 %to 3;
  5.                                 id=&j.;
  6.                                 var&i.=ranuni(1);
  7.                                 output;
  8.                         %end;
  9.                 run;
  10.         %end;
  11. %mend prd;
  12. %prd

  13. data test;
  14. merge test1-test5;
  15. by id;
  16. run;
复制代码

使用道具

地板
ybhk 发表于 2015-12-2 21:08:59 |只看作者 |坛友微信交流群
孤单的我们 发表于 2015-12-2 17:31
才疏学浅,真心没太看懂,能给大概解释一下吗,谢谢

使用道具

7
ybhk 发表于 2015-12-2 21:12:21 |只看作者 |坛友微信交流群
木叶知秋 发表于 2015-12-2 19:17
直接merge不行吗?
merge test1-test5  这种写法似乎运行不了

使用道具

8
木叶知秋 发表于 2015-12-2 22:48:51 |只看作者 |坛友微信交流群
ybhk 发表于 2015-12-2 21:12
merge test1-test5  这种写法似乎运行不了
可以运行的,再不济你这样吧
  1. %macro merge;
  2. data test;
  3. merge %do i=1 %to 5;test&i. %end;;
  4. by id;
  5. run;
  6. %mend merge;
  7. %merge
复制代码
已有 1 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
Tigflanker + 1 + 2 + 3 + 4 分析的有道理

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

使用道具

9
孤单的我们 发表于 2015-12-3 09:15:30 |只看作者 |坛友微信交流群
ybhk 发表于 2015-12-2 21:08
才疏学浅,真心没太看懂,能给大概解释一下吗,谢谢
第一步,获取数据集名称,生成宏变量。数据集不限于test1-test5这种结构,test12q--test6a2也可以。
第二步,通过循环合并数据集。

使用道具

10
ybhk 发表于 2015-12-3 11:07:16 |只看作者 |坛友微信交流群
木叶知秋 发表于 2015-12-2 22:48
可以运行的,再不济你这样吧
谢谢,merge test1-test5 这种写法,运行了,确实运行不了,这个宏是可以运行的,但是我不明白 %end后面为什么两个分号,第一次见到这种,还望能够指教下,谢谢

使用道具

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

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

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

GMT+8, 2024-4-25 13:51