在特定要求内选择SAS数据

在特定要求内选择SAS数据,sas,Sas,我有一个数据集,如本截图所示。在每一天中,每个间隔(例如9:30:00)都有多个重复的RIC。例如,重复观察2和3(DDA21124700) 我想在每天的每个时间间隔内选择每个第一个字母。例如,对于20120103,09:30:00,我想获取观察值1、2、4、6,依此类推 我使用了以下代码: data test1; do until (last.interval); set test; by _ric date_L_ interval; if first._ric; out

我有一个数据集,如本截图所示。在每一天中,每个间隔(例如9:30:00)都有多个重复的RIC。例如,重复观察2和3(DDA21124700)

我想在每天的每个时间间隔内选择每个第一个字母。例如,对于20120103,09:30:00,我想获取观察值1、2、4、6,依此类推

我使用了以下代码:

data test1;
 do until (last.interval);
set test;
   by _ric date_L_ interval;
   if first._ric;
   output;
 end;
run;
虽然代码看起来像下一个屏幕截图中显示的那样工作,但我仍然希望有人能帮助我检查代码,因为我对SAS的经验实在太少了。谢谢


您的数据顺序不正确,无法在一段时间间隔内检测每个RIC的第一条记录。首先对数据进行正确排序,然后您的逻辑可能会起作用。在DOW循环内部使用Subseting IF语句时也存在逻辑错误,因为它将中止外部DO循环。您希望只使用普通的IF/THEN语句(
IF-first.\u-ric-THEN-output;
)。但在这种情况下,你真的不需要道琼斯指数循环。所以我们可以使用一个子集,如果

你可以按时间间隔排序,然后再按时间和日期排序

data WANT ;
  set HAVE ;
  by interval _ric date_L_ ;
  if first._ric;
run;

或者,如果您按RIC排序,然后按间隔和日期排序,并改用FIRST.INTERVAL,则可以获得相同的记录。

似乎您希望获得组中最早的时间,您也可以尝试以下方法:

proc sql;
   select * from have group by _ric,interval having time_L_=min(time_L_);
quit;