楼主: liyichen17
2572 10

[问答] 请问:关于sort和merge的问题。 [推广有奖]

  • 4关注
  • 1粉丝

讲师

3%

还不是VIP/贵宾

-

威望
0
论坛币
5 个
通用积分
1.0166
学术水平
4 点
热心指数
5 点
信用等级
2 点
经验
19465 点
帖子
165
精华
0
在线时间
602 小时
注册时间
2012-2-28
最后登录
2022-12-20

相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
我有两个dataset,一个是drugone2010(有两个variable,drug和f1),另一个是drugtwo2010(有两个variable,drug和f2
  1. proc sort data=drugone2010;
  2.   by drug;
  3. run;
  4. proc sort data=drugtwo2010;
  5.   by drug;
  6. run;
  7. proc print data=drugone2010;
  8. run;
  9. proc print data=drugtwo2010;
  10. run;
复制代码

sort完之后,如下格式: drugone.jpg                       drugtwo.jpg
问题1.  为什么drugtwo2010里面,x02、x03没有像drugone2010一样在x01后面?

然后merge一下
  1. data test;
  2.   merge drugone2010 drugtwo2010;
  3.   by drug;
  4. run;
  5. proc print;
  6. run;
复制代码
结果如下:
merge.jpg

问题2.   x01、x04等等为什么变成了2个obs没有哦merge在一起呢?



二维码

扫码加我 拉你入群

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

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

关键词:Merge SOR Variable dataset print

回帖推荐

pobel 发表于8楼  查看完整内容

你可以用groupformat选项: proc format; value test 1,2,3="HAHA"; run; data x y z; format a test.; a=1; b1="x";output x; a=2; b2="y";output y; a=3; b3="x";output z; run; data test; merge x y z; by a groupformat; run;
沙发
webgu 发表于 2012-12-4 15:56:51 |只看作者 |坛友微信交流群
你的两个x01或x04应该不是同一个东西。有可能原因:
1. 中英文不同状态下的输入。
2. 全角半角不同状态下的输入。
3.其它原因。
SAS资源
1. SAS 微信:StatsThinking
2. SAS QQ群:348941365

使用道具

藤椅
liyichen17 在职认证  发表于 2012-12-4 16:07:40 |只看作者 |坛友微信交流群
webgu 发表于 2012-12-4 15:56
你的两个x01或x04应该不是同一个东西。有可能原因:
1. 中英文不同状态下的输入。
2. 全角半角不同状态下 ...
可是这两个dataset是用同一个宏output出来的,应该是一样的格式呀。
为了验证这一点,我freq了一下
  1. proc freq data=test;
  2.   table drug/nocol nopercent norow ;
  3. run;
复制代码
在结果里面,可以看到X01的频数是2。
-
freq.jpg
-
为什么merge认为两个‘X01’不同,而FREQ认为两个‘X01’是相同的呢?

使用道具

板凳
sailingyf 发表于 2012-12-4 16:07:51 |只看作者 |坛友微信交流群
好奇怪啊, 你确定字母都是大写吗?
同意webgu的意见

使用道具

报纸
pobel 在职认证  发表于 2012-12-4 16:09:57 |只看作者 |坛友微信交流群
liyichen17 发表于 2012-12-4 16:07
可是这两个dataset是用同一个宏output出来的,应该是一样的格式呀。
为了验证这一点,我freq了一下在结果 ...
是不是drug变量应用了format?
和谐拯救危机

使用道具

地板
liyichen17 在职认证  发表于 2012-12-4 16:29:26 |只看作者 |坛友微信交流群
pobel 发表于 2012-12-4 16:09
是不是drug变量应用了format?
是呀,下面是我的format。-
format.jpg

使用道具

7
pobel 在职认证  发表于 2012-12-4 16:57:18 |只看作者 |坛友微信交流群
proc print data=drugtwo2010;
  format  drug $drug.;
run;

merge的时候是按照变量的原始值,而不是formatted值
和谐拯救危机

使用道具

8
pobel 在职认证  发表于 2012-12-4 17:01:14 |只看作者 |坛友微信交流群
你可以用groupformat选项:

proc format;
   value test  1,2,3="HAHA";
run;

data x y z;
    format a test.;
    a=1; b1="x";output x;
        a=2; b2="y";output y;
        a=3; b3="x";output z;
run;

data test;
   merge x y z;
   by a groupformat;
run;
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
webgu + 1 + 1 + 1 火眼精金

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

和谐拯救危机

使用道具

9
liyichen17 在职认证  发表于 2012-12-4 17:12:54 |只看作者 |坛友微信交流群
pobel 发表于 2012-12-4 17:01
你可以用groupformat选项:

proc format;
Thanks a lot, let me try.

使用道具

10
liyichen17 在职认证  发表于 2012-12-6 17:06:27 |只看作者 |坛友微信交流群
pobel 发表于 2012-12-4 17:01
你可以用groupformat选项:

proc format;
你好,用groupformat解决了merge的问题,还想再问一下,在data步筛选obs的时候应该怎么办呢?
  1. data test;
  2.   set drugone2010;
  3.   where drug in ('X01','X04');
  4. run;
复制代码
-
然后Obs=0

使用道具

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

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

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

GMT+8, 2024-4-27 21:43