如上文所言,整理原始数据很重要,比如看了你的数据后我知道你开始计数的年份是从78年开始,到06年结束。
那么换成数组时start 和end可就不能在这个范围之外,而你的原始数据里有start计为77年的,end甚至有计为9999年的,这很容易就让array下标越界报错,因此,在原始代码里我加了两行修正用于保护:
PROC IMPORT DATAFILE = 'D:\SAS9\My SAS Files\9.0\Little SAS Book Codes\hw5.xls' DBMS=excel OUT = hw5test;
RUN;
/*先选前十个记录试试*/
options obs = 10;
data test;
set hw5test(drop = eventid name location newdate2str location1);
array myar(*) F8 - F36;
*assume F8 data always starts in 1978;
startyear = 1978;
endyear = 2006;
/* 78年前的start标记没数据对应,那我求和反正就从有数据的元年78年开始算了*/
if start < startyear then start = startyear;
start_idx = start - startyear + 1;
/*同理06年后的end也无数据可对应,那我求和也就到最后一列06年打止了*/
if end > endyear then end = endyear;
end_idx = end - startyear + 1;
do i = start_idx to end_idx;
total + myar(i);
end;
put total=;
run;
SAS运算结果前十行结果如下:
total=10.29
total=46.22
total=106.4
total=206.01
total=261.38
total=318.17
total=339.46
total=350.02
total=386.76
total=441.83
你看看对不对得上。