SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 3812|回复: 10
打印 上一主题 下一主题

怎样用data step,而不是sql得出不重复数据?

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2012-4-1 21:40:06 | 只看该作者

怎样用data step,而不是sql得出不重复数据?

我有一个data set,如下面:
filed name
a
ab
a
ab
abc

用什么statement,才可以得出不重复的结果,象下面那样呢?
field name
a
ab
abc

谢谢大侠!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2012-4-2 16:46:11 | 只看该作者

Re: 怎样用data step,而不是sql得出不重复数据?

刚学SAS,不知对不对

data a;
   input c$;
   cards;
a
ab
a
ab
abc
;
run;

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

data b1;
   set b;
   by c;
   if first.c;  
run;
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2012-4-4 04:28:07 | 只看该作者

Re: 怎样用data step,而不是sql得出不重复数据?

[code:1v2bq1q8]data a;
input c $ @@;
cards;
a ab a ab abc
;
proc sort data = a out = b nodup;
by c;
run;[/code:1v2bq1q8]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2012-4-5 09:24:14 | 只看该作者

Re: 怎样用data step,而不是sql得出不重复数据?

[quote="gogotiger":396ns60f][code:396ns60f]data a;
input c $ @@;
cards;
a ab a ab abc
;
proc sort data = a out = b nodup;
by c;
run;[/code:396ns60f][/quote:396ns60f]

谢谢!但,有没有办法在data step里面输出,输出成一个data set的呢?
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
5#
 楼主| 发表于 2012-4-5 14:06:28 | 只看该作者

Re: 怎样用data step,而不是sql得出不重复数据?

以上代码不就是输出 b的数据集么
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
6#
 楼主| 发表于 2012-9-3 13:55:13 | 只看该作者

Re: 怎样用data step,而不是sql得出不重复数据?

[quote="gogotiger":2yoolu79][code:2yoolu79]data a;
input c $ @@;
cards;
a ab a ab abc
;
proc sort data = a out = b nodup;
by c;
run;[/code:2yoolu79][/quote:2yoolu79]这个方法可以!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
7#
 楼主| 发表于 2012-9-3 14:55:59 | 只看该作者

Re: 怎样用data step,而不是sql得出不重复数据?

[code:3qp6ug2s]
data a;
input c $ @@;
cards;
a ab a ab abc
;
proc sort data=a;
by c;
run;
data b;
set a;
by c;
if first.c and last.c;
run;
[/code:3qp6ug2s]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
8#
 楼主| 发表于 2012-9-13 09:39:40 | 只看该作者

Re: 怎样用data step,而不是sql得出不重复数据?

如果不先sort可以考虑一下:京剧
[code:g7pgis8v]data have2;
   set have; by name notsorted;
   array t[1000] $ _temporary_;
   if first.name then do;
      n ++1;t[n] =name;
      if _n_ >1 then do i =1 to n -1;
         if name =t[i] then do;
            n +-1; i =0; leave;
         end;
      end;
      if ( i  | _n_ =1) then output;
   end;
run;[/code:g7pgis8v]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
9#
 楼主| 发表于 2012-9-13 13:10:22 | 只看该作者

Re: 怎样用data step,而不是sql得出不重复数据?

试一下 Hash Table 吧
[code:3vsoljzv]
data ads;
input x $;
datalines;
a
ab
a
ab
abc
;

data _null_;  
   length x $ 8;
   if _N_ = 1 then do;
      declare Hash ht(dataset:'work.ads',ordered:'a');
      ht.defineKey('x');
      ht.defineData('x');
      ht.defineDone();
          call missing(x);
   end;
   rc=ht.output(dataset:'bds');
run;
[/code:3vsoljzv]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
10#
 楼主| 发表于 2012-9-19 13:31:02 | 只看该作者

Re: 怎样用data step,而不是sql得出不重复数据?

同样一个问题,能得到这么多的回答。高手如云呐。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-3 09:54 , Processed in 0.074128 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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