如何使用SAS阵列按组进行计数和平均?

时间:2014-09-23 03:49:53

标签: sas

我有以下数据集:

CustID NGIF RAMN RFA1

2001 6 52 1
2002 1 23 1 2003 8 99 1
2004 20 100 4
2005 11 114 3
2006 9 138 1
2007 7 105 3
2008 15 190 2
2009 27 297 1
2010 22 207 1
2011 19 171 2

我想使用数组计算每个RFA1级别(1-4),平均值(RFA1级别的总RAMN /该RFA1级别的总计数)。没有数组,如果我拆分并做,我得到个人级别的结果。以下是代码:

enter code here

data averagetotalcatlog (drop=CustomerID NGIF RAMN);
set Catlog;
    by RFA1;
where RFA1 = 1;
if First.RFA1 then TotalRAMN = 0 & TotalCust = 0 & Average = 0;
TotalCust + 1;
TotalRAMN + RAMN;
if Last.RFA1;
Average = TotalRAMN / TotalCust;
run;

我的问题是如何使用数组为所有4级RFA1编写此代码?

1 个答案:

答案 0 :(得分:0)

SAS使用数组处理“宽格式”数据

如果您使用proc转置转置数据,则可以使用数组操作数据。

data temp;
input CustID NGIF RAMN RFA1;
datalines;
2001 6 52 1
2002 1 23 1
2003 8 99 1
2004 20 100 4
2005 11 114 3
2006 9 138 1
2007 7 105 3
2008 15 190 2
2009 27 297 1
2010 22 207 1
2011 19 171 2
;
run;

proc sort data=temp; by RFA1; run;

proc transpose data=temp out=temp2;
by RFA1;
var RAMN;
run;

data temp3;
    set temp2;
        SUM_RAMN = 0; CNT_RAMN = 0;
        array COL_{6} COL1-COL6;
        do I = 1 to 6;
            if COL_{I} ne . then do;
                SUM_RAMN = SUM_RAMN + COL_{I};
                CNT_RAMN = CNT_RAMN + 1;
            end;
        end;
        AVG_RAMN = SUM_RAMN/CNT_RAMN;
    keep RFA1 AVG_RAMN;
run;

然而,正如之前所说的那样......对于可以用比阵列更简单的方法在SAS中解决的问题,这将是一个非常困难的解决方案。