SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

楼主: shiyiming
打印 上一主题 下一主题

请教高手:多列带有重复的ID合并成一列

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
11#
 楼主| 发表于 2010-7-22 00:10:51 | 只看该作者

Re: 请教高手:多列带有重复的ID合并成一列

有七十几万个records.....................................
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
12#
 楼主| 发表于 2010-7-22 08:54:40 | 只看该作者

Re: 请教高手:多列带有重复的ID合并成一列

没啥好法子,只能寄希望于重复的ID尽可能的多
[code:1bj53880]data raw;
        input id1 id2 id3 id4;
cards;
1 11 21 31
1 12 22 31
2 11 22 32
2 13 21 32
3 14 23 32
4 11 22 33
55 56 57 58
;

proc sql;
        create table id_pair as
                select id1 as old_id,id1 as new_id from raw
                union
                select id2 as old_id,id2 as new_id from raw
                union
                select id3 as old_id,id3 as new_id from raw
                union
                select id4 as old_id,id4 as new_id from raw;
quit;

data _null_;
        if _n_=1 then do;
                declare hash h(dataset:"id_pair",ordered:'yes',hashexp:16);
                h.defineKey('old_id');
                h.defineData('old_id','new_id');
                h.defineDone();
                call missing(old_id,new_id);
                declare hiter iter('h');
        end;
        set raw end=eof;
        array arr{*} id1-id4;
        do i=1 to 3;
                do j=i+1 to 4;
                        rc=h.find(key:arr(i));
                        temp=new_id;
                        do while(iter.next()=0);
                                if new_id=temp then rc=h.replace(key:old_id,data:old_id,data:arr(j));
                        end;
                end;
        end;
        if eof then rc=h.output(dataset:'_temp');
run;

proc sql;
        create table id_pair as
                select a.old_id,b.group
                        from _temp a,
                                (select min(old_id) as group,old_id from _temp
                                        group by new_id) b
                        where a.old_id=b.old_id;
        drop table _temp;
quit;

data final(keep=group id1-id4);
        if _n_ = 1 then do;
                declare hash h(dataset:"id_pair",hashexp:16);
                h.defineKey('old_id');
                h.defineData('group');
                h.defineDone();
                call missing(old_id,group);
        end;
        set raw;
        rc=h.find(key:id1);
run;[/code:1bj53880]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
13#
 楼主| 发表于 2010-7-22 10:11:19 | 只看该作者

Re: 请教高手:多列带有重复的ID合并成一列

oloolo和hopewell的想法很好,还有所有的楼上楼下你们也都是我崇拜的偶像。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
14#
 楼主| 发表于 2010-7-22 14:53:12 | 只看该作者

Re: 请教高手:多列带有重复的ID合并成一列

to 死猪头:能不能试着写一写code呢? <!-- s:) --><img src="{SMILIES_PATH}/icon_smile.gif" alt=":)" title="Smile" /><!-- s:) -->

Hopewell的代码,还在run,看似也要好长时间。 多谢先 :)
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
15#
 楼主| 发表于 2010-7-22 15:34:21 | 只看该作者

Re: 请教高手:多列带有重复的ID合并成一列

to gzgoon:  
忘了告诉了你了,大概,可能,或许,差不多,如果没太大问题的话,2012年前,你就能看到结果了,当然了,也可能是条error信息.对此,建议的解决方案是,一,终止程序的执行,二,加入猪哥教,信猪哥得代码 <!-- s:lol: --><img src="{SMILIES_PATH}/icon_lol.gif" alt=":lol:" title="Laughing" /><!-- s:lol: -->
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
16#
 楼主| 发表于 2010-7-22 15:40:02 | 只看该作者

Re: 请教高手:多列带有重复的ID合并成一列

to hopewell:
大哥,真伤感情!!!!!!我都run了四五个小时了!!!!!
哈哈哈!!!!!!!!!!
(record 少于10000,还可以得到结果)

加入猪哥教!猪哥,别让我们失望啊   <!-- s:lol: --><img src="{SMILIES_PATH}/icon_lol.gif" alt=":lol:" title="Laughing" /><!-- s:lol: -->
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
17#
 楼主| 发表于 2010-7-22 15:53:18 | 只看该作者

Re: 请教高手:多列带有重复的ID合并成一列

to 死猪头
一看这位老兄就是数学或者计算机类专业出身的。一下就看出是图论中的标准问题。要我来猜这句话出处就只好用解剖学中的术语了。。。。。。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
18#
 楼主| 发表于 2010-7-22 20:39:33 | 只看该作者

Re: 请教高手:多列带有重复的ID合并成一列

赞同。这类专业受过这类理论的熏陶。其实对于这类问题我是一点兴趣也没有。不过还是乐意欣赏高水平的奉献。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
19#
 楼主| 发表于 2010-7-22 20:46:13 | 只看该作者

Re: 请教高手:多列带有重复的ID合并成一列

<!-- s:D --><img src="{SMILIES_PATH}/icon_biggrin.gif" alt=":D" title="Very Happy" /><!-- s:D -->
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
20#
 楼主| 发表于 2010-7-22 20:57:08 | 只看该作者

Re: 请教高手:多列带有重复的ID合并成一列

同一条观察里面的四个id值应该是不等的。

上面动用hash重型武器,宏,还有无敌的图论(估计要用到IML)。

实现方式各异, 效率很不同。
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|小黑屋|手机版|Archiver|SAS中文论坛  

GMT+8, 2026-2-4 03:29 , Processed in 0.068906 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表