Date 按每个受试者的最早日期分组SAS数据集

Date 按每个受试者的最早日期分组SAS数据集,date,sas,Date,Sas,我试图根据每个特定主题的最早事件实例检索SAS数据集的子集。 以下是一个示例数据集: subject date 001 12/22/2009 001 01/14/2016 001 03/20/2014 002 02/12/2007 002 01/23/2015 我只想要以下几点: subject date 001 12/22/2009 002 02/12/2007 通过先处理来使用。

我试图根据每个特定主题的最早事件实例检索SAS数据集的子集。 以下是一个示例数据集:

subject    date
001        12/22/2009
001        01/14/2016
001        03/20/2014
002        02/12/2007
002        01/23/2015
我只想要以下几点:

subject    date
001        12/22/2009
002        02/12/2007

通过先处理
来使用。

/* sort into order */ proc sort data=have ; by subject date ; run ; /* Take 1st record per subject (i.e. earliest date) */ data want ; set have ; by subject ; if first.subject ; run ; /*整理*/ proc sort data=have; 受试日期; 跑 /*每个受试者第一次记录(即最早日期)*/ 数据需求; 集有; 按科目划分; 如果是第一个主题; 跑
通过先处理
来使用。

/* sort into order */ proc sort data=have ; by subject date ; run ; /* Take 1st record per subject (i.e. earliest date) */ data want ; set have ; by subject ; if first.subject ; run ; /*整理*/ proc sort data=have; 受试日期; 跑 /*每个受试者第一次记录(即最早日期)*/ 数据需求; 集有; 按科目划分; 如果是第一个主题; 跑
通过procsql,您可以如下所示

 proc sql;
 create table want as
 select * from have
 group by subject
 having date=min(date);
或者你可以使用proc方法

   proc means data=have  nway;
   class subject;
   var date;
  output out=want(keep =id date) min(date) =date;
  run;

通过procsql,您可以如下所示

 proc sql;
 create table want as
 select * from have
 group by subject
 having date=min(date);
或者你可以使用proc方法

   proc means data=have  nway;
   class subject;
   var date;
  output out=want(keep =id date) min(date) =date;
  run;

PROC意味着@Kiran中的示例将是我的首选方法,稍微修改一下,以便在OUTPUT语句中使用IDGROUP选项。它的工作原理与“选择的解决方案”基本相同,但不需要排序。我将日期变量修改为iso8601字符格式,以显示IDGROUP也支持字符变量

data have;
   infile cards firstobs=2;
   input subject:$3. date:mmddyy.;
   dtc = put(date,yymmdd10.);
   random = ranuni(134);
   format date date9.;
   cards;
subject    date
001        03/20/2014
002        02/12/2007
001        01/14/2016
001        12/22/2009
002        01/23/2015
;;;;
   run;
proc print;
   run;
proc summary data=have nway;
   class subject;
   output out=want(drop=_type_) idgroup(min(dtc) obs out(date--random)=);
   run;
proc print;
   run;

PROC意味着@Kiran中的示例将是我的首选方法,稍微修改一下,以便在OUTPUT语句中使用IDGROUP选项。它的工作原理与“选择的解决方案”基本相同,但不需要排序。我将日期变量修改为iso8601字符格式,以显示IDGROUP也支持字符变量

data have;
   infile cards firstobs=2;
   input subject:$3. date:mmddyy.;
   dtc = put(date,yymmdd10.);
   random = ranuni(134);
   format date date9.;
   cards;
subject    date
001        03/20/2014
002        02/12/2007
001        01/14/2016
001        12/22/2009
002        01/23/2015
;;;;
   run;
proc print;
   run;
proc summary data=have nway;
   class subject;
   output out=want(drop=_type_) idgroup(min(dtc) obs out(date--random)=);
   run;
proc print;
   run;