2017-07-06 9 views
1

とのGROUP BYに私は、データセットを持っていると私はグループ文ででそれを読んでいます:SASドロップレコードのみ1観察

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の手順を拡張があればそこにエラーを返すことに気づきました1つの観測しか持たないbyグループのレコードです。例えば

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

AAPLの1つのレコードのみが存在する場合、SASは、コマンドを実行することを拒否します。

したがって、私は、グループ(シンボル、日付)に1つのレコードしか持たない同じシンボルですべてのレコードを削除する方法があるのだろうかと思っていましたか?

答えて

4

データステップを使用しているので、すでにシングルトンを削除するロジックを追加するだけです。グループの最初と最後のレコードは、そのグループにレコードが1つしかないことを示します。

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

より洗練されたソリューションです。 – cole

1

SAS PROC SQLの優れた機能の1つは、すべての詳細を保持しながら、まとめてまとめて追加することができる点です。これにより、そのような削除が容易になります(他の多くのコンテキストでも便利です)。私。

PROC SQL; 

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

QUIT;