我有一个数据集,如此截图所示。在每一天,每个间隔(例如9:30:00)具有多个重复的_RIC。例如,重复观察2和3(DDA211204700)。
我想在每天的每个时间间隔中选择每个第一个_RIC。例如,对于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的经验很少。谢谢!
答案 0 :(得分:2)
您的数据未正确排序,无法检测到INTERVAL中每个_RIC的第一条记录。首先正确排序数据,然后您的逻辑可能会起作用。在DOW循环中使用子集化IF语句也存在逻辑错误,因为它将中止外部DO循环。您只想使用普通的IF / THEN语句(if first._ric then output;
)。但是你真的不需要这种情况下的DOW循环。所以我们可以使用子集IF。
您可以按INTERVAL排序,然后按_RIC和日期排序。
data WANT ;
set HAVE ;
by interval _ric date_L_ ;
if first._ric;
run;
如果您按_RIC排序,然后按INTERVAL和日期排序并使用FIRST.INTERVAL,则可以获得相同的记录。
答案 1 :(得分:1)
您似乎希望在群组中获得最早的时间__,您也可以尝试这样做:
proc sql;
select * from have group by _ric,interval having time_L_=min(time_L_);
quit;