Sorting SAS:提取按日期排序的最后一个唯一组合
我很难提取工人在按时间安排的活动中执行的独特任务。唯一的组合由ID和模式定义。以下数据集模拟了该场景:Sorting SAS:提取按日期排序的最后一个唯一组合,sorting,sas,duplicates,Sorting,Sas,Duplicates,我很难提取工人在按时间安排的活动中执行的独特任务。唯一的组合由ID和模式定义。以下数据集模拟了该场景: ID Time Mode Event 23456 20120101 A Open 23456 20120101 B Closed 87690 20120311 G Closed 98000 20120201 B Open 98000
ID Time Mode Event
23456 20120101 A Open
23456 20120101 B Closed
87690 20120311 G Closed
98000 20120201 B Open
98000 20120301 A Open
98000 20120101 A Open
87889 20121009 C Closed
87889 20120101 C Open
87900 20120411 A Closed
87900 20120102 A Closed
希望取得以下结果:
ID Time Mode Event
23456 20120101 A Open
23456 20120101 B Closed
87690 20120311 G Closed
98000 20120201 B Open
98000 20120301 A Open
87889 20121009 C Closed
87900 20120411 A Closed
我将首先按时间降序排序:
proc sort data=df; by ID descending time; run;
然后,我可以再次使用sort按ID和模式获取唯一组合:
proc sort data=df dupout=nodup nodupkey;
by ID Mode; run;
在最后一步中,如何确保无重复记录也是最新事件
谢谢 您可以先使用。最后一个概念
data have;
input ID Time:yymmdd8. Mode $ Event $;
format time yymmdd10.;
datalines;
23456 20120101 A Open
23456 20120101 B Closed
87690 20120311 G Closed
98000 20120201 B Open
98000 20120301 A Open
98000 20120101 A Open
87889 20121009 C Closed
87889 20120101 C Open
87900 20120411 A Closed
87900 20120102 A Closed
;
proc sort data = have out=have1;
by id mode time;
run;
data want;
set have1;
by id mode time;
if last.mode and last.time then output;
run;
或者,我可以使用如下所示的简单proc sql
proc sql;
create table want1 as
select id, time, mode, event from have
group by id, mode
having time = max(time);
要使代码正常工作,在第一个排序中,您需要作为
proc sort data=df;按ID模式下降时间;运行