PROC GROUP with GROUP命令非常慢。为什么?解决方法可行吗?

问题描述:

我有一个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

你应该做的是要么改变你的宏产生一个数据集具有可变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