楼主: luckycai
1513 7

关于Merge的问题 [推广有奖]

  • 0关注
  • 0粉丝

本科生

2%

还不是VIP/贵宾

-

威望
0
论坛币
400 个
通用积分
0
学术水平
1 点
热心指数
1 点
信用等级
1 点
经验
513 点
帖子
57
精华
0
在线时间
43 小时
注册时间
2010-3-6
最后登录
2016-1-2

楼主
luckycai 在职认证  发表于 2012-6-10 19:22:28 |AI写论文
10论坛币
数据集如下
a b c
1 2 11
1 3 22
1 4 33
2 1 44
2 3 11
......
想变成的样子是
a b c
1 1 .
1 2 11
1 3 22
1 4 .
2 1 44
2 2 .
2 3 11
2 4 .
.....
即对a 的取值,b都要从1取到4,c保持原有值或者缺失。
。,sas刚入门,谢谢各位大侠帮帮忙。。。。

关键词:Merge 各位大侠 数据集 442

本帖被以下文库推荐

沙发
webgu 发表于 2012-6-10 22:49:29
/*生成中间辅助数据集*/
data b;
do a=1 to 2;  /*假设你的a 数据集中变量a的值只到2*/
do b=1 to 4;
output;
end;
end;
run;

proc sort data=a;
  by a b;
run;

proc sort data=b;
  by a b;
run;
/*t生成目标数据集*/
data want;
merge a b;
by a b;
run;
SAS资源
1. SAS 微信:StatsThinking
2. SAS QQ群:348941365

藤椅
luckycai 在职认证  发表于 2012-6-11 10:22:36
webgu 发表于 2012-6-10 22:49
/*生成中间辅助数据集*/
data b;
do a=1 to 2;  /*假设你的a 数据集中变量a的值只到2*/
非常感谢你的回答,不过我的a不是规律的。
我自己想了个办法,写出来跟大家分享下
data a;
set b;
by a;
if first.a;
run;
data d;
set a;
by a;
do i=1 to 4;
b=i;
output;
drop i;
end;
proc sort data=d;
by a b;
run;
proc sort data=b;
by a b;
run;
data e;
merge d b;
by a b;
run;

板凳
hopewell 发表于 2012-6-11 12:34:52
  1. data out;
  2.     array arr{4} _temporary_;
  3.     do until(last.a);
  4.         set raw;
  5.         by a;
  6.         arr(b)=c;
  7.     end;
  8.     do b=1 to dim(arr);
  9.         c=arr(b); output; arr(b)=.;
  10.    end;
  11. run;
复制代码
已有 2 人评分学术水平 热心指数 信用等级 收起 理由
liuyingbei + 1 + 1 + 1 我很赞同
webgu + 1 + 1 + 1 精彩帖子

总评分: 学术水平 + 2  热心指数 + 2  信用等级 + 2   查看全部评分

观钓颇逾垂钓趣 种花何问看花谁

报纸
MerlinZHOU 发表于 2012-6-11 21:06:28
  1. data ads;
  2. input a b c;
  3. ab=strip(a)||strip(b);
  4. cards;
  5. 1 2 11
  6. 1 3 22
  7. 1 4 33
  8. 2 1 44
  9. 2 3 11
  10. ;

  11. data bds;
  12. do a=1 to 2;
  13. do b=1 to 4;
  14. ab=strip(a)||strip(b);
  15. output;
  16. end;
  17. end;
  18. run;

  19. proc sql noprint;
  20. create table cds as
  21. select bds.a,bds.b,bds.ab
  22. from bds
  23. where ab not in (
  24.                  select ab
  25.                                  from ads
  26.                  );
  27. quit;

  28. data dds;
  29. set ads cds;
  30. run;

  31. proc sort data=dds;
  32.   by ab;
  33. run;

  34. data eds;
  35.   set dds;
  36.   drop ab;
  37. run;
复制代码
如果你的数据集中的a是不规律的,只要修改一下这个程序就可以了。

地板
raymonica 发表于 2012-6-11 23:00:08
good to know

7
juneandvictor 发表于 2012-6-13 04:41:19
data inter;
do a=1 to 2;
do b=1 to 4;
output;
end;
end;
run;

/* Let Origin be the data set containing your original data*/
proc sql;
create table New as
select I.*, c
from Origin as O
right join Inter as I
on O.a =I.a and O.b=I.b
;
quit;

run;

8
xjzb 发表于 2013-6-19 15:07:36

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-1 09:26