楼主: Imasasor
1606 8

怎么不用排序的情况下更新数据? [推广有奖]

  • 1关注
  • 64粉丝

VIP

已卖:215份资源

学科带头人

33%

还不是VIP/贵宾

-

TA的文库  其他...

超哥喜欢的文章

威望
1
论坛币
46528 个
通用积分
32.8376
学术水平
238 点
热心指数
246 点
信用等级
231 点
经验
37132 点
帖子
849
精华
3
在线时间
2235 小时
注册时间
2012-7-4
最后登录
2026-1-21

初级学术勋章 初级热心勋章 初级信用勋章 中级热心勋章 中级学术勋章

楼主
Imasasor 发表于 2012-12-11 15:36:03 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
data idwrong;
input id name $ birth;
cards;
1 张三 88
2 李四 87
4 周看 90
12 李四 85
;

data idright;
input id name $ birth;
cards;
3 李四 85
5 周看 90
;

简单来说,每个数据集的id号没有重复的,idwrong中有些id是错误的,要用idright中的正确的id来替换它,判断两个数据集中属于同一个人的标志是name和birth相同。
最后的结果应该是
1 张三 88
2 李四 87
5 周看 90
3 李四 85



怎么不对数据集sort的情况下实现上述需求?
二维码

扫码加我 拉你入群

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

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

关键词:Birth RIGHT Input cards wrong

已有 1 人评分热心指数 信用等级 收起 理由
数据分析师3K + 1 + 1 鼓励积极发帖讨论

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

欢迎加入亚太地区第一R&Python数据挖掘群: 251548215;

沙发
Imasasor 发表于 2012-12-11 15:44:03
补充说明:
因为我的数据idwrong比较大,idright很少,所以我不想改变现有idwrong的观测顺序
下面一个代码,改变了原来idwrong的观测顺序,有没有什么办法改进?
proc sql;
create table final as
select a.*,b.id as id2 from idwrong a left join idright b
on a.name=b.name and a.birth=b.birth;
quit;
data final;
set final;
if id2^=. then id=id2;
drop id2;
run;
欢迎加入亚太地区第一R&Python数据挖掘群: 251548215;

藤椅
ziyenano 发表于 2012-12-11 15:46:02
data idwrong;
input id name $ birth;
cards;
1 张三 88
2 李四 87
4 周看 90
12 李四 85
;

data idright;
input id name $ birth;
cards;
3 李四 85
5 周看 90
;
run;

proc sql;
create table test as
select (case when b.id is missing then a.id else b.id end ) as id ,a.name,a.birth from
idwrong a left join  idright b
on a.name=b.name and a.birth=b.birth
order by a.id;
quit;
已有 1 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
数据分析师3K + 20 + 1 + 1 + 1 热心帮助其他会员

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

板凳
Imasasor 发表于 2012-12-11 16:06:12
ziyenano 发表于 2012-12-11 15:46
data idwrong;
input id name $ birth;
cards;
唉,对sql不是太熟悉,忘了order by 语句。
请问一下高手:sql选择观测的原理是什么?
为什么不用order by时观测的顺序是那样的,而不是跟第一个数据集的一致?
欢迎加入亚太地区第一R&Python数据挖掘群: 251548215;

报纸
pobel 在职认证  发表于 2012-12-11 16:11:00
data wanted;
  if 0 then set idright;
   *** define Hash object;
   declare hash h(dataset:'idright');
        h.definekey('name','birth');
                h.definedata('id');
                h.definedone();

   do until(last);
      set idwrong end=last;
          _n_=h.find();
          output;
          end;
        stop;
run;
已有 2 人评分学术水平 热心指数 信用等级 收起 理由
webgu + 1 + 1 + 1 精彩帖子
ziyenano + 1 + 1 + 1 精彩帖子

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

和谐拯救危机

地板
ziyenano 发表于 2012-12-11 16:18:33
Imasasor 发表于 2012-12-11 16:06
唉,对sql不是太熟悉,忘了order by 语句。
请问一下高手:sql选择观测的原理是什么?
为什么不用order ...
根据唯一主键匹配,通常用的算法是B-Tree,
或者根据hash算法,
对B-Tree的算法我也不是很清楚~
其实很多数据库可以用基于两张表的update,
这样原数据集的顺序是不会变的,
只是SAS sql中基于两张表的update不怎么好用

7
webgu 发表于 2012-12-11 16:35:00
pobel 发表于 2012-12-11 16:11
data wanted;
  if 0 then set idright;
   *** define Hash object;
Hash 在merge数据时,常被遗忘。虽然吃内存厉害,若是其实一个数据大,一个数据小时,用着很合适。
SAS资源
1. SAS 微信:StatsThinking
2. SAS QQ群:348941365

8
Imasasor 发表于 2012-12-11 20:34:28
pobel 发表于 2012-12-11 16:11
data wanted;
  if 0 then set idright;
   *** define Hash object;
谢谢你,但是我不知道为什么你写这么多
我删了一些看不太懂的,剩下这些,也是可以的啊?
data wanted;
if _n_=1 then do;
declare hash a(dataset:'idright');
        a.definekey('name','birth');
                a.definedata('id');
                a.definedone();
                                end;
      set idwrong;
          _n_=a.find();
run;
欢迎加入亚太地区第一R&Python数据挖掘群: 251548215;

9
playmore 发表于 2012-12-12 09:08:57
pobel 发表于 2012-12-11 16:11
data wanted;
  if 0 then set idright;
   *** define Hash object;
请pobel大牛解释下程序

第一,其中的do until(last),然后end=last有什么作用?
set idwrong不就是从_N_=1循环到_N_=last了吗?

第二,还有stop的作用是什么?

十分感谢!
playmore邀请您访问ChinaTeX论坛!!!进入ChinaTeX论坛

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

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