2017-07-09 59 views
-1

我有一個數據集,其格式類似於以下後:SAS計數觀測數以內的按組,刪除一些數據

| Symbol | Date  | Time | BB | BO | MIDPRICE | 
|--------|----------|------|----|----|----------| 
| AAPL | 20130102 | 1 | 2 | 3 | 2.5  | 
| AAPL | 20130102 | 2 | 2 | 3 | 2.5  | 
| AAPL | 20130102 | 3 | 1 | 3 | 1.5  | 
| ... |   |  | | |   | 
| AAPL | 20130102 | 100 | 3 | 4 | 3.5  | 
| FB  | 20130102 | 1 | 3 | 6 | 4.5  | 
| FB  | 20130102 | 2 | 3 | 6 | 4.5  | 
| FB  | 20130102 | 3 | 3 | 5 | 4  | 
| ... |   |  | | |   | 
| FB  | 20130102 | 100 | 3 | 4 | 3.5  | 

我試圖計算每種按組的觀察次數。

例如,如果數據集按符號排序,我想知道AAPL,FB等有多少個觀察值。在上述情況下,AAPL有四個觀察值,FB有四個觀察值。

我想將結果導出到數據集和稍後的csv文件(我知道如何導出到csv文件,所以它不是這個問題的一部分)。

我一直在線閱讀資料。看來通常有兩種方法。在這個document中,作者說nobs可能不準確,特別是如果您修改了原始數據集。不幸的是,我的情況就是這樣。

data STOCK; 
    SET RAWDATA; by SYMBOL; 
    /* Delete those with only one observation */ 
    if MIDPRICE < 3 then delete; 
    run; 

因此,根據本stackoverflow post,唯一的選擇是sql語句:我用下面的代碼刪除了一些意見。但是,該帖子中使用的SQL語句僅計算觀察的總數,而不是按組中的每個觀察值進行計數。

我也想過通過增加一個變量來計數。但看起來這是一個非常糟糕的性能選擇方案。

因此,我想知道是否有任何高性能,同時做到這一點的防錯方式?

我操作的數據集非常大。通常每個數據集有30 Terabytes +,我有成千上萬個用於運行我的代碼。

謝謝!

+0

這不應該是一個SO問題,有幾千個答案可以在線回答這個問題。 http://support.sas.com/kb/24/595.html – Reeza

+0

http://video.sas.com/detail/videos/how-to-tutorials/video/3306906230001/summary-statistics-using-sas- studio?autoStart = true – Reeza

+0

http://support.sas.com/kb/25/279.html – Reeza

回答

0

我用下面的代碼中底:

data quotescount; 
    set quotes_processed; by Symbol; 
    if first.Symbol then count=0; 
    count+1; 
    if last.Symbol then output; 
run; 

這似乎是最可靠的方式,因爲SQL查詢可能返回wrong results

2

我會用proc sql

proc sql; 
    create table newtable as 
     select symbol, count(*) as cnt 
     from stock 
     group by symbol; 
quit; 
+0

應該退出;在proc sql語句的末尾? @Gordon Linoff –

+0

SQL可能會生成大N的不正確數字。有關於此的SAS注意事項,它可能已被更正爲9.4,但我不認爲它是。 – Reeza

+0

http://support.sas.com/kb/54/652.html – Reeza