仅进行一次观察的各组SAS下降记录

仅进行一次观察的各组SAS下降记录,sas,Sas,我有一个数据集,我正在用by group语句读取它: data TEMPDATA; SET RAWDATA; by SYMBOL DATE; run; proc expand data=TEMPDATA out=GAPDATA to=day method=step; by symbol date; id time; run; 但是,我意识到,如果by组中有一条记录只有一个观察值,proc expand过程将返回一个错误 例如: | Symbol | Date

我有一个数据集,我正在用by group语句读取它:

  data TEMPDATA;
    SET RAWDATA; by SYMBOL DATE;
  run;
  proc expand data=TEMPDATA out=GAPDATA to=day method=step;
  by symbol date;
  id time;
  run;
但是,我意识到,如果by组中有一条记录只有一个观察值,proc expand过程将返回一个错误

例如:

| Symbol | Date     | Time | BB | BO | MIDPRICE |
|--------|----------|------|----|----|----------|
| AAPL   | 20130102 | 2    | 2  | 3  | 2.5      |
如果AAPL只有一条记录,SAS将拒绝执行该命令

因此,我想知道是否有一种方法可以删除所有具有相同符号的记录,即在“按组”符号“日期”中只有一条记录?

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

PROC SQL;

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

QUIT;
SAS PROC SQL中的一个很好的特性是,您可以分组并添加摘要度量,同时保留所有细节。这使得这样的删除很容易,并且在许多其他环境中也很有用。即

PROC SQL;

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

QUIT;

因为您已经在使用数据步骤,所以只需添加逻辑即可删除单例。在其组中既是第一条记录又是最后一条记录的任何记录都表示该组中只有一条记录

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

因为您已经在使用数据步骤,所以只需添加逻辑即可删除单例。在其组中既是第一条记录又是最后一条记录的任何记录都表示该组中只有一条记录

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

绝对是更优雅的解决方案!绝对是更优雅的解决方案!