楼主: lachance
1890 8

[问答] 这样的简单批proc sql 怎么会有重复记录呢, 是sas的bug吗? [推广有奖]

  • 1关注
  • 3粉丝

已卖:3份资源

讲师

44%

还不是VIP/贵宾

-

威望
0
论坛币
693 个
通用积分
0.0157
学术水平
4 点
热心指数
5 点
信用等级
1 点
经验
10072 点
帖子
403
精华
0
在线时间
399 小时
注册时间
2008-1-22
最后登录
2020-4-15

楼主
lachance 发表于 2012-7-21 19:05:44 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币

表 a 记录集如下 id1 id2
2   5
3   5
5   1  
9   0

表 b
id1  id2
2    5
3    5
5    0
5    1
9    0

简单的sql 想把两个表的相同纪录集合找出来,但是为什么结果不是想要的呢?
proc sql noprint;
create table ab as
select *
from a , b
where a.id1=b.id1 and a.id2 = b.id2;
出来的结果按照正常的SQL应该是4列,但是SAS中就只能出2列
2  5
3  5
5  1
5  1
9  0
这样让结果混淆,搞不清楚(5  1)  (5  1) 应该对应哪个表里的哪些列.
SAS的bug吗?

二维码

扫码加我 拉你入群

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

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

关键词:proc sql sas的 ROC bug sql 记录 create where

[

沙发
syrsrtdhsdfscd 发表于 2012-7-21 19:13:29
呵呵,看来,你们还是不懂刚才及昨晚我看视频的逻辑——

比如,我是遵纪守法的、靠自己的实力发展自己的、而且只想维护自己的合法权益的!!!

比如,你们是违法乱纪的、盗窃别人的研究成果的、想踩着别人往上爬的!!!

如果你们的行为,只是一次的话,那么——你们因此而遭受的名誉和其他损失是会很小的,而且你们的形象也不会太差!!!但是,由于你们长时间实施这种行为,而且牵连进来这么多人,所以,不断地发展下去的话,你们的损失会越来越大、形象会越来越差——这个可不是你们能在某些方面赢我一两次就能解决问题的!!!

——这才是真正的蝴蝶效应!!!

藤椅
syrsrtdhsdfscd 发表于 2012-7-21 19:18:30
所以,你们将目前的现象,归结我——我个人的转变,或者是有外界力量在帮助我,那么是十分错误的!!!真正的原因,就在于——一开始的时候,双方的选择不同——

我的选择是——遵纪守法,不侵犯他人的合法权益,然后好好发展自己;

你们的选择是——违法乱纪,侵犯他人的合法权益,然后踩着别人向上爬。

在最初的原点上,仅仅这么一丁点的差别,到最后——也是天渊之别!!!

所以,昨晚我给你们看的信息的目的是——不要说我将你们当做是反向指针,就算是你们所有的行为和理念、逻辑中的90%、95%的与我的完全相同,但是仅仅是因为在遵纪守法、是否尊重他人、是否损害他人的合法权益——这10%、5%的微小差别,也会导致——人们仍然是支持我的、而不会支持你们!!!这就是中国古话中的——失之毫厘,谬以千里!!!

板凳
ahydrbsfd 发表于 2012-7-21 19:23:20
提示: 作者被禁止或删除 内容自动屏蔽

报纸
YueweiLiu 发表于 2012-7-21 19:32:14
不太清楚你的问题,如果是说结果里需要显示哪个数据集的变量,可以用 dataset.variable 或者 alias.variable;另外,你说的SAS只列出两列,不知道是怎么运行出来的,我这里没问题。
  1. proc sql noprint;
  2.         create table ab as
  3.         select a.*
  4.         from a , b
  5.         where a.id1=b.id1 and a.id2 = b.id2;
  6. quit;
复制代码

地板
lachance 发表于 2012-7-21 19:58:53
请问ls , 你可以把a和b的字段都列出来吗? 我想同时显示出来,而不是只显示a or b 的
[

7
YueweiLiu 发表于 2012-7-21 20:27:43
  1. data a;
  2. input id1 id2;
  3. cards;
  4. 2 5
  5. 3 5
  6. 5 1
  7. 9 0
  8. ;

  9. data b;
  10. input id1 id2;
  11. cards;
  12. 2 5
  13. 3 5
  14. 5 0
  15. 5 1
  16. 9 0
  17. ;

  18. proc sql noprint;
  19.         create table ab as
  20.         select a.id1 as id1_a,a.id2 as id2_a,b.id1 as id1_b,b.id2 as id2_b
  21.         from a, b
  22.         where a.id1=b.id1 and a.id2 = b.id2;
  23. quit;
复制代码

8
lachance 发表于 2012-7-21 21:58:45
proc sql noprint;
        create table ab as
       select a.id1 as id1_a,a.id2 as id2_a,b.id1 as id1_b,b.id2 as id2_b
        from a, b
        where a.id1=b.id1 and a.id2 = b.id2;
quit;

必须要修改列的名称才行呀, 但是在数据库的SQL里就可以直接写
        create table ab as
        select a.*, b*
        from a, b
        where a.id1=b.id1 and a.id2 = b.id2;

会出来4列,也许就是这个区别吧。
[

9
hcydlee 发表于 2012-7-23 10:58:12
没遇到过这种情况,也许需要回炉一下了。
80 字节以内
不支持自定义 Discuz! 代码

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

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