我正在尝试根据每个特定主题的最早事件实例检索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
将 by-processing 与first.
一起使用:
/* 按顺序排序 */过程排序数据=有; 按主题日期 ; 跑;/* 每个科目的第一条记录(即最早日期( */数据需要 ; 设置有 ; 按主题 ; 如果第一个主题 ; 跑;
通过 proc sql 你可以如下所示
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;
@Kiran中的 PROC MEANS 示例将是我的首选方法,稍作修改以在 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;