我有以下数据集:
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编写此代码?
答案 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中解决的问题,这将是一个非常困难的解决方案。