考虑以下数据
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;
您可以使用哈希表或数组来跟踪已读取的名称。但如果你的数据不是太大,你也可以通过添加 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 ;