2017-02-10 27 views
1

我有一個MACRO,它需要一個數據集D並且基本上輸出k個不相交的數據集D_1,...,D_k。值k不固定,取決於事先未知的數據屬性。不過,我們可以假設k不大於10。PROC GROUP with GROUP命令非常慢。爲什麼?解決方法可行嗎?

數據集D包含變量x和y,我想爲每個D_i疊加x和y的線/散點圖。在我的具體情況下,x是時間,我希望看到每個D_i的輸出y並將它們相互比較。

希望這是明確的。

我該怎麼做?我事先不知道k,所以我需要某種%do循環。但似乎並沒有我可以在「proc sgplot」中放置一個do循環。

我可能會製作一個包含很長一系列命令的宏,但我不確定。

如何在SAS中覆蓋這些圖?

編輯:我包括參考爲什麼我試圖避免使用GROUP子句做一個PROC SGPLOT。我嘗試了下面的代碼,計算時間超過了30分鐘(之後我取消了計算,所以我不知道實際需要多長時間)。 PROC SQL運行速度很快,程序停留在PROC SGPLOT上。

proc sql; 
    create table dataset as select  
     date, product_code, sum(num_of_records) as total_rec 
     from &filename 
      group by product_code, data 
       order by product_code, date 
    ; 
quit; 

PROC SGPLOT Data = dataset; 
    scatter x = date y = total_rec/group=product_code; 
    title "Total records by product code"; 
run; 

該文件中觀察值的數量爲76,000,000。

+0

你能舉一個例子'&filename'數據集 - 顯示product_Code等的頻率嗎?只是'數據mydata;做product_code = 1到10000;日期= 1到7600; (某種方式來產生明智的x y);輸出;結束;運行;'或者沿着這些線路。與每個產品代碼約有多少個產品代碼和多少行相匹配的內容。 – Joe

+0

我遇到了一個簡單的情況,有兩個產品代碼,其中一半數據有一個產品代碼,另一半有另一個產品代碼。這夠了嗎? – Lepidopterist

+0

如果它再現您的問題,那就很好。某些需要30-60分鐘或其他需要運行的物品才能使速度更快。 – Joe

回答

0

你應該做的是要麼改變你的宏產生一個數據集具有可變d_i(或任何你可以在邏輯上它命名),其識別數據集,將已經去(或任何確定哪些標識它數據集,它會去),或後宏組合數據集。

然後,您可以使用group覆蓋您的地塊。舉例來說:

data my_data; 
    call streaminit(7); 
    do d_i = 1 to 5; 
    y = 10;  
    x = 0; 
    output; 
    do x = 1 to 10; 
     y + round(rand('Uniform')*3,.1)-1.5; 
     output; 
    end; 
    end; 
run; 

proc sgplot data=my_data; 
    series x=x y=y/group=d_i; 
run; 
+0

我這樣做的全部原因是因爲我的數據集非常龐大,以至於使用Group進行繪圖的時間過長。 Proc SQL是對數據進行排序然後分別繪製數據的更快速的方法。 – Lepidopterist

+0

我意外地低估了你。 – Lepidopterist

+0

我不能取消投票,我只能贊成。我不確定你是否回答了我的問題。我有一個龐大的數據集(我爲一家大公司工作)。我不知道爲什麼,但使用組命令的proc sgplot需要一個小時才能完成。另一方面,通過同一個分組在sql中分割數據集非常快。我想利用這個。這是我的問題。 – Lepidopterist