SAS中文论坛

标题: 菜鸟接着请教 [打印本页]

作者: shiyiming    时间: 2010-10-16 18:00
标题: 菜鸟接着请教
菜鸟接着请教:

如果有一数据表含3条数据,如:

日期 a b c d
20101014 3 4 1 2
20101015 4 1 2 3
20101016 1 2 3 4

要做到:
1.如果是第一条数据前提下:
如a,b,c,d=1, 则赋值a,b,c,d=4.5;
如a,b,c,d=2,则赋值a,b,c,d=4.5;
如a,b,c,d=3,则赋值a,b,c,d=3;
如a,b,c,d=4,则赋值a,b,c,d=0;

2.如果是最后一条数据前提下:
如a,b,c,d=1, 则赋值a,b,c,d=4.5;
如a,b,c,d=2,则赋值a,b,c,d=1.5;
如a,b,c,d=3,则赋值a,b,c,d=0;
如a,b,c,d=4,则赋值a,b,c,d=1.5;

3.中间数据:
如a,b,c,d=1, 则赋值a,b,c,d=4.5;
如a,b,c,d=2,则赋值a,b,c,d=4.5;
如a,b,c,d=3,则赋值a,b,c,d=0;
如a,b,c,d=4,则赋值a,b,c,d=0;

即,变为如下结果:
日期 a b c d
20101014 3 0 4.5 4.5
20101015 0 4.5 4.5 0
20101016 4.5 1.5 0 1.5
作者: shiyiming    时间: 2010-10-16 18:34
标题: Re: 菜鸟接着请教
[code:2i6p32vi]data raw;
    input date yymmdd8. a b c d;
    format date yymmdd10.;
datalines;
20101014 3 4 1 2
20101015 4 1 2 3
20101016 1 2 3 4
;
data out;
    set raw end=last;
    array temp(3,4) _temporary_ (4.5,4.5,3,0,4.5,1.5,0,1.5,4.5,4.5,0,0);
    array varlist(*) a b c d;
    select;
        when(_n_=1) i=1;
        when(last=1) i=2;
        otherwise i=3;
    end;
    do j=1 to dim(varlist);
        varlist(j)=temp(i,varlist(j));
    end;
    drop i j;
run;[/code:2i6p32vi]
作者: shiyiming    时间: 2010-10-16 19:02
标题: Re: 菜鸟接着请教
hopewell 出手不得了,高手呀!
我要看懂都吃力。 <!-- s:D --><img src="{SMILIES_PATH}/icon_biggrin.gif" alt=":D" title="Very Happy" /><!-- s:D -->
赞一个!
作者: shiyiming    时间: 2010-10-16 19:16
标题: Re: 菜鸟接着请教
看懂了,但很难用这么简洁的方法。
原本还以为要用first. last.呢。
高!佩服!




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