Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sorting SAS:提取按日期排序的最后一个唯一组合_Sorting_Sas_Duplicates - Fatal编程技术网

Sorting SAS:提取按日期排序的最后一个唯一组合

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和模式定义。以下数据集模拟了该场景:

  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模式下降时间;运行