删除重复项而不更改名称顺序

问题描述 投票:0回答:1

考虑以下数据

Data ss;
infile datalines;
input ename $;
datalines;
Ram
Sita
Ram
Arjun
Sita
Ram
Arjun
;
run;

#output

Ram
Sita
Arjun

我知道其他方法,例如按 ename 对数据进行排序,然后使用第一个,但这样我们需要对数据进行排序,并且输出将从 Arjun、Ram 和 Sita 开始。但是,我们需要保留我在预期输出中提到的顺序。

proc sort data=ss;
by ename;
run;

data want;
set ss;
by ename;
if first.ename;
run;
sas
1个回答
0
投票

您可以使用哈希表或数组来跟踪已读取的名称。但如果你的数据不是太大,你也可以通过添加 rownumber 变量来实现,然后你可以排序,选择你显示的first.ename,然后再次排序以恢复顺序。

Data ss;
infile datalines;
input ename $;
datalines;
Ram
Sita
Ram
Arjun
Sita
Ram
Arjun
;
run;

data ss2 ;
  set ss ;
  rownum=_N_ ;
run ;

proc sort data=ss2 ;
  by ename rownum ;
run ;

data ss3 ;
  set ss2 ;
  by ename rownum ;
  if first.ename ;
run ;

proc sort data=ss3 ;
  by rownum ;
run ;

proc print data=ss3 ;
run ;

或者如果你喜欢 SQL,添加 rownum 列后你可以这样做:

proc sql ; 
  create table want as
  select ename 
  from ss2
  group by ename
  having rownum=min(rownum)
  order by rownum
  ;
quit ;
© www.soinside.com 2019 - 2024. All rights reserved.