【发布时间】:2015-04-04 01:42:34
【问题描述】:
我有一个数据集,其中包含一个人所学的所有课程的信息。我对他们开始的第一门课程(开始日期和结束日期)以及他们开始的最后一门课程的开始和结束日期感兴趣。课程可以重叠,并且每个人可以有大量课程。 我想编辑数据,以便一个人是一个观察。
首先我是这样对数据进行排序的:
by personid startdate descending enddate;
我试过这个:
proc sql;
create table new as
select distinct personid,
count(*) as number_courses,
min(startdate) as first_startdate 'First startdate' format date9., min (enddate) as first_enddate 'First enddate' format date9.,
max(startdate) as last_startdate 'Last startdate' format date9., max(enddate) as last_enddate 'Last enddate' format date9.
from old
group by personid
;
quit;
但这并没有给我想要的东西。通常是错误的 min(enddate)。我想要与 startdate 的最小值相对应的 enddate,它不是最小的 enddate。
相反,我写道:
data first last;
set old;
by personid startdate descending enddate;
if first.personid then output first;
if last.personid then output last;
keep personid startdate enddate ;
run;
这给了我想要的。然后我不得不重命名变量,最后通过 personid 离开加入数据集。 但我觉得这种方法不是最优的。
所以我的问题是。我应该在 proc sql 中更改什么以获得我想要的结果?
【问题讨论】:
标签: sql sorting filter sas left-join