Sas 在一个条件下从小组中进行第一次观察

Sas 在一个条件下从小组中进行第一次观察,sas,Sas,假设我有一张桌子: id date N 1 04FEB2017 1 1 04FEB2017 . 1 04FEB2017 2 1 04FEB2017 . 1 05FEB2017 3 2 04FEB2017 4 2 04FEB2017 5 它按id排序,然后按日期排序 对于所有相同的id,对于所有相同的date,如果N不是null,我只想保留第一行。因此,结果是

假设我有一张桌子:

    id  date        N

    1   04FEB2017   1
    1   04FEB2017   .
    1   04FEB2017   2
    1   04FEB2017   .
    1   05FEB2017   3
    2   04FEB2017   4
    2   04FEB2017   5
它按id排序,然后按日期排序

对于所有相同的
id
,对于所有相同的
date
,如果
N
不是
null
我只想保留第一行。因此,结果是:

 id  date        N

1   04FEB2017   1
1   04FEB2017   .
1   04FEB2017   .
1   05FEB2017   3
2   04FEB2017   4

我尝试了排名,但这并没有让我产生任何想法

因为数据集是经过排序的,您可以使用
BY
语句和
FIRST.
语法来查找每组中的第一条记录

data have;
informat id 4. date date9. n 4.;
format date date9.;
input id date n;
datalines;
1 04FEB2017 1 
1 04FEB2017 . 
1 04FEB2017 2 
1 04FEB2017 . 
1 05FEB2017 3 
2 04FEB2017 4 
2 04FEB2017 5 
;
run;

data want;
set have;
by id date;

if first.date or missing(n) ;
run;

第二个数据步骤仅保留第一个日期,或者如果缺少n。这是根据评论编辑的

我误解了你的意思。编辑来了。