如上文所言,整理原始數(shù)據(jù)很重要,比如看了你的數(shù)據(jù)后我知道你開始計(jì)數(shù)的年份是從78年開始,到06年結(jié)束。
那么換成數(shù)組時start 和end可就不能在這個范圍之外,而你的原始數(shù)據(jù)里有start計(jì)為77年的,end甚至有計(jì)為9999年的,這很容易就讓array下標(biāo)越界報(bào)錯,因此,在原始代碼里我加了兩行修正用于保護(hù):
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標(biāo)記沒數(shù)據(jù)對應(yīng),那我求和反正就從有數(shù)據(jù)的元年78年開始算了*/
if start < startyear then start = startyear;
start_idx = start - startyear + 1;
/*同理06年后的end也無數(shù)據(jù)可對應(yīng),那我求和也就到最后一列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運(yùn)算結(jié)果前十行結(jié)果如下:
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
你看看對不對得上。