2017-04-04 15 views
1

大きなデータセット(> 20GB)にSASを使用しています。私がDATAステップを実行すると、同じ変数でデータセットをソートしたにもかかわらず、 "BY変数が正しくソートされていません......"というメッセージが表示されました。既にソートされていますが、BY変数が正しくソートされていません。

proc sort data=output.TAQ; 
    by market ric date miliseconds descending type order; 
run; 

options nomprint; 

data markers (keep=market ric date miliseconds type order); 
    set output.TAQ; 
    by market ric date; 

    if first.date; 

    * ie do the following once per stock-day; 
    * Make 1-second markers; 

    /*Type="AMARK"; Order=0; * Set order to zero to ensure that markers get placed before trades and quotes that occur at the same milisecond; 
    do i=((9*60*60)+(30*60)) to (16*60*60); miliseconds=i*1000; output; end;*/ 
run; 

、エラーメッセージがいた:私はSORT再びPROCを実行した場合は、SASにも言った、「入力データセットがすでにソートされ、行われませソートは」 私のコードではありません、あなたのソースの場合

ERROR: BY variables are not properly sorted on data set OUTPUT.TAQ. 
RIC=CXR.CCP Date=20160914 Time=13:47:18.125 Type=Quote Price=. Volume=. BidPrice=9.03 BidSize=400 
AskPrice=9.04 AskSize=100 Qualifiers= order=116458952 Miliseconds=49638125 exchange=CCP market=1 
FIRST.market=0 LAST.market=0 FIRST.RIC=0 LAST.RIC=0 FIRST.Date=0 LAST.Date=1 i=. _ERROR_=1 
_N_=43297873 
NOTE: The SAS System stopped processing this step because of errors. 
NOTE: There were 43297874 observations read from the data set OUTPUT.TAQ. 
WARNING: The data set WORK.MARKERS may be incomplete. When this step was stopped there were 
     56770826 observations and 6 variables. 
WARNING: Data set WORK.MARKERS was not replaced because this step was stopped. 
NOTE: DATA statement used (Total process time): 
     real time   1:14.21 
     cpu time   26.71 seconds 
+0

ログにエラーメッセージが表示されました:代わりにそれをソートする

たぶん、あなたのような何かが、いくつかの手順にそれを破ることができますか? – user667489

+0

確かにログの詳細を見る必要があります。観測数は非常に奇妙です - あなたは 'first.dateならば、マーカーはoutput.taqのサブセットでなければなりませんが、処理が停止する時点で〜43.3m obsがoutput.taqと〜56.8から読み取られましたmは書かれています_out_ work.markers ... – keydemographic

+0

@keydemographic doループの中に出力文があるので、obsカウントはあらゆる種類のことをするかもしれません。 – user667489

答えて

0

データセットがデータベース内にある場合、別の照合順序でソートされる可能性があります。

はあなたの並べ替えの前に次のことを試してみてください。

options sortpgm=sas; 
1

エラーが_N_=43297873で、深いあなたのデータのステップに発生しています。つまり、PROC SORTはある時点まで作業していますが、失敗します。あなたのSAS環境や、OUTPUT.TAQがどのように格納されているかを知ることなく、その理由を知るのは難しいです。

大きなデータセットをソートする際に、リソースの問題やファイルシステムの制限が報告されている人がいます。 SAS FAQ: Sorting Very Large Datasets with SASから

(ない公式ソース):

  • WORKフォルダに仕分け、あなたは(もしUnixの下で、または5倍)、データセットのサイズを4倍に等しいの無料ストレージを持っている必要があります

  • あなたはRAMが不足することができる

  • あなたはオプションMSGLEVEL=iを使用することができるかもしれとFULLSTIMERは、より完全な画像を取得する

options sastraceloc=saslog;も有用なメッセージを生成することができます。あなたはprocのソートを実行したときに

/* Get your market ~ ric ~ date pairs */ 
proc sql; 
    create table market_ric_date as 
    select distinct market, ric, date 
    from output.TAQ 
    /* Possibly an order by clause here on market, ric, date */ 
; quit; 

data millisecond_stuff; 
    set market_ric_date; 
    *Possibly add type/order in this step as well?; 
    do i=((9*60*60)+(30*60)) to (16*60*60); miliseconds=i*1000; output; end; 
run; 

/* Possibly a third step here to add type/order if you need to get from original data source */ 
関連する問題