proc sort data=chapt7.smooth;by cid month;run;
data smooth;
        set chapt7.smooth;
        by cid;
        array lags(12);
        lags(1)=lag(balance);
        do i=2 to 12;
    lags(i)=lag(lags(i-1));
    end;
        do j=12 to 2 by -1;
        if j gt cns then lags(j)=.;
                put j=;
        end;
        if first.cid then do 
       cns=0;
       do i=1 to 12;lags(i)=.;
       end;
    end;
        cns+1;
mean6=mean(of lags1-lags6);
mean12=mean(of lags1 - lags12);
drop i j;
run;
书上说first不能放在by的后面,和lag函数有关系,菜鸟不懂,求问原理!!
确实在把first放在前边的时候,运行会报错原因是lags()是还没有定义。
菜鸟还想问,代码在编译的时候生成了什么啊,cns是在第二个do循环里就用到了,但是是在最后的first里,才第一次给cns赋值的啊~~什么原理,使这段代码可以这么用呢?
菜鸟愚昧,求大神指点!!!