SAS中文论坛

标题: 请教--如何用简单的CODE实现以下目的 [打印本页]

作者: shiyiming    时间: 2003-11-10 12:59
标题: 请教--如何用简单的CODE实现以下目的
data a;
  input id month cl;
cards;
1 1 100
1 2 100
1 3 110
1 4 110
1 5 110
1 6 110
2 1 80
2 2 80
2 3 80
2 4 80
2 5 80
2 6 80
3 1 300
3 2 400
3 3 350
3 4 500
3 5 500
3 6 600
3 7 600
3 8 600
;

有关数据如上,如果我希望计算对于每个ID, CL的变动次数(升高,降低),请问有什么好办法.比如,ID=1,#INCREASE=1, #DECREASE=0;ID=2,#INCREASE=0, #DECREASE=0;ID=3, #INCREASE=3, #DEACREASE=1

我现在的做法是建新的变量,如CL1 CL2 CL3...然后在比较,但感觉这个办法很苯,而且在MONTH不同时比较麻烦,请教高手有没有更好的办法?
作者: shiyiming    时间: 2003-11-10 13:45
用lag() 和first.id。Hope this heps.

proc sort data=a out=_1;
        by id month;
run;

data _2(drop= month cl _dif);
        set _1;
        by id month;
        _dif =dif(cl);
        if first.id then do;
                _dif         =.;
                INCREASE =0;
                DECREASE =0;
                end;
        else do;
                if _dif lt 0 then INCREASE +1;
                else if _dif gt 0 then DECREASE +1;
        end;
        if last.id then output;
run;
作者: shiyiming    时间: 2003-11-10 13:52
发完帖子后发现从SAS拷贝过来的DATAT步中的语句层次没有了,阅读起来很不方便。即使我想用空格来保持层次也不行。

复杂的语句如果没有语句层次,阅读实属不易。

shiyiming先生能否增加这项功能?为盼!
作者: shiyiming    时间: 2003-11-10 14:06
偶早发现这个问题了,但发现这是HTML的顽症,难以根除。
有没有高人帮小弟可以解决? <!-- s:oops: --><img src="{SMILIES_PATH}/icon_redface.gif" alt=":oops:" title="Embarassed" /><!-- s:oops: -->
作者: shiyiming    时间: 2003-11-10 14:29
谢了,高人啊.我以前用LAG()做过,不过老是有点问题,可能是当时是初始值设置的问题.




欢迎光临 SAS中文论坛 (http://mysas.net/forum/) Powered by Discuz! X3.2