我现在需要用如下代码统计每个群体的数据:
proc means data=test.total(where=(x>10 and y>10)) n mean sum std min max; /*x>10 and y>10是A1用户群的条件*/
var x1 x2 x3;
run;
由于树形结构细分的群体很多,大概有20多个,就意味着上述代码要运行20多遍(只需要改变相应where条件),这样效率太低了,不知道有没有更好的办法来提高运算效率。我的想法是给用户加上若干个分组标签,例如L1_seg表示用户属于A1还是A2;L2_seg表示用户属于A1.1、A1.2等;L3_seg表示用户属于A1.1.1 A1.1.2等,然后用如下代码:
data test.total;
set test.total;
if x1>10 and y>10 then L1_seg="A1";
if... then L1_seg="A2";
if.......... then L2_seg="A1.1";
...
run;
proc means data=test.total n mean sum std min max;
class L1_seg L2_seg...;
var x1 x2 x3;
types L1_seg L2_seg...;
run;
不知道是否还有更好的办法可以显著提高代码和运算效率,上面那种办法给用户加标签的时候把条件全部写出来好长啊,而且容易出错。作者: shiyiming 时间: 2009-9-21 17:04 标题: Re: 高手看看如何提升这个数据处理的效率 用宏试试
[code:20wblkhg]%macro test(inds,x,y);
proc means data=&inds (where=(x>&x and y>&y)) n mean sum std min max;
var x1 x2 x3;
run;
%mend;
层数一般在4-6层,所有节点数(含中间节点)在20-30个。你说的用层数来写标签如何写?我目前的想法是有多少层就要构造多少个标签变量。不知道能否更简化:)哈哈。作者: shiyiming 时间: 2009-9-23 12:53 标题: Re: 高手看看如何提升这个数据处理的效率 [code:2am8y9xw]data test.total;
set test.total;
if x1>10 and y>10 then do;
L1_seg="A1";
if.......... then L2_seg="1";
end;
else if... then L1_seg="A2";
...
run;[/code:2am8y9xw]