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