SAS只按一个观察按组丢弃记录

时间:2017-07-06 02:58:45

标签: sas

我有一个数据集,我正在通过分组声明阅读它:

  data TEMPDATA;
    SET RAWDATA; by SYMBOL DATE;
  run;
  proc expand data=TEMPDATA out=GAPDATA to=day method=step;
  by symbol date;
  id time;
  run;

但是,我意识到如果只有一个观察的组中有记录,则proc扩展过程将返回错误。

例如:

| Symbol | Date     | Time | BB | BO | MIDPRICE |
|--------|----------|------|----|----|----------|
| AAPL   | 20130102 | 2    | 2  | 3  | 2.5      |

如果只有一条AAPL记录,SAS将拒绝执行该命令。

因此,我想知道是否有办法丢弃所有记录,使用相同的符号,只有一个记录在按组(符号,日期)?

2 个答案:

答案 0 :(得分:4)

由于您正在使用数据步骤,因此只需添加逻辑来删除单例。任何记录都是其组中的第一个记录和最后一个记录,表示该组中只有一条记录。

data TEMPDATA;
  SET RAWDATA;
  by SYMBOL DATE;
  if first.date and last.date then delete;
run;

答案 1 :(得分:1)

SAS PROC SQL中的一个不错的功能是,您可以分组并添加摘要度量,同时保留所有细节。这使得这种移除变得容易(并且在许多其他环境中也是有用的)。即。

PROC SQL;

CREATE TABLE tempdata2 AS
SELECT *
FROM tempdata
GROUP BY symbol, date
HAVING count(*) > 1
;

QUIT;