2017-05-27 119 views
0

分析數據:SAS NOTSORTED我用下面的代碼等效

set taq.cq_&yyyymmdd:; 
by symbol date time NOTSORTED ex; 

有成千上萬的我在天爲單位運行的代碼數據集。當& yyyymmdd只指定一個數據集(一天,例如20130102)時,它可以工作。然而,當我嘗試運行它爲多個數據集(例如,201301 :),SAS將返回以下錯誤:

BY NOTSORTED/NOBYSORTED cannot be used with SET statement when 
more than one data set is specified. 

如果我不能在這裏使用NOTSORTED,那是什麼我可以用一個等效聲明?

我對關鍵字NOTSORTED的理解是在數據尚未排序時使用它。因此,我需要先排序嗎?怎麼做?

我也被NOTSORTED引用的變量數量所困惑。它隻影響「時間」,還是影響「符號,數據,時間」?

非常感謝!

更新#2:

的過程中緊跟在SET語句的其餘部分是:

Data _quotes; 

SET STATEMENT HERE 

Change the name of a variable in the dataset (Variable name is EXN). 

last.EXN in a if statement. If the condition is satisfied, label EXN. 

Drop some variables. 

Run; 

DATA NEWDATASET (sortedby= SYMBOL DATE TIME index=(SYMBOL) 
       label="WRDS-TAQ NBBO Data"); 

SET _quotes; 
by symbol date time; 

.... 

Run; 
+0

你的數據集有多大? – Reeza

+0

每個數據集30千兆字節。總共有大約82500個數據集。但作爲測試,我現在只運行30個數據集。 @Reeza –

+0

排序肯定會受到限制。您需要解釋其餘的流程來建議替代方案。請注意我的答案的最後一部分,並且這可能會交錯數據集而不會追加它們。 – Reeza

回答

0

NOTSORTED手段(如我沒有張貼原始代碼許可僞代碼) SAS可以假定數據中的排序順序是正確的,所以它可能沒有明確地經過PROC SORT,但它按照BY語句中列出的邏輯順序。

BY語句中的所有變量都包含在NOTSORTED選項中。鑑於我懷疑你完全不瞭解小組處理。 使用通常有點危險,特別是如果你不明白按小組處理。如果您的數據位於同一組但不相鄰,則它將無法正常工作,並且不會產生錯誤。正確的解決方法取決於您的流程。

我會建議閱讀關於BY組處理的文檔。這是相當深入的,並有大量的樣本來說明不同類型的計算。

http://support.sas.com/documentation/cdl/en/lrcon/69852/HTML/default/viewer.htm#n138da4gme3zb7n1nifpfhqv7clq.htm

NOTSORTED往往是在例如職位用於或者避免排序或使用自定義排序是很難用其他方式來實現時。顯式排序將會消除這個問題,但是當你有一條帶有BY語句的SET語句時,你也可能會誤解SAS如何處理數據。我相信這被稱爲交錯。

http://support.sas.com/documentation/cdl/en/lrcon/69852/HTML/default/viewer.htm#n1tgk0uanvisvon1r26lc036k0w7.htm

+0

如果我放棄NOTSORTED語句,是否將按關鍵字排序?這實際上是別人寫的代碼,我只是試圖在多個數據集上實現它。 –

+0

當我刪除NOTSORTED語句時,錯誤變爲「錯誤:BY變量未正確排序在數據集TAQ.CQ_20130102上。」 –

+0

我的理解是,可能變量是分組的,但沒有排序。但是NOSORTED語句似乎不適用於多個數據集。所以我不知道我應該在這裏做什麼... –

0

我懷疑NOTSORTED關鍵字被用來找到與同一符號,日期,時間內EX變量的值相同的觀察團。如果你只需要找到FIRST,那麼你可以使用LAG()函數來計算FIRST.EX標誌。

data want; 
    set taq.cq_&yyyymmdd:; 
    by symbol date time; 
    first_ex = first.time or ex ne lag(ex); 

否則,您可能想將進程轉換爲數據步驟視圖,然後將視圖一起設置。

data work.view_cq_20130102/view=work.view_cq_20130102; 
    set taq.cq_20130102; 
    by symbol date time ex NOTSORTED; 
    ... 
run; 
... 
data want ; 
    set work.view_cq_201301: ; 
    by symbol date time; 
... 
+0

但是,我必須將不同的數據集作爲視圖進行硬編碼嗎?其中有成千上萬... –

+0

此外,如果我放棄NOTSORTED語句錯誤將成爲「錯誤:BY變量未正確排序數據集」 –

+0

如果單個數據集沒有按SYMBOL DATE TIME那麼如果您需要尋求最佳解決方案的幫助,則需要更好地解釋整個過程。另外爲什麼你有成千上萬的個人SAS數據集? – Tom