SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 754|回复: 3
打印 上一主题 下一主题

菜鸟接着请教

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2010-10-16 18:00:05 | 只看该作者

菜鸟接着请教

菜鸟接着请教:

如果有一数据表含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
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2010-10-16 18:34:33 | 只看该作者

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]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2010-10-16 19:02:28 | 只看该作者

Re: 菜鸟接着请教

hopewell 出手不得了,高手呀!
我要看懂都吃力。 <!-- s:D --><img src="{SMILIES_PATH}/icon_biggrin.gif" alt=":D" title="Very Happy" /><!-- s:D -->
赞一个!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2010-10-16 19:16:58 | 只看该作者

Re: 菜鸟接着请教

看懂了,但很难用这么简洁的方法。
原本还以为要用first. last.呢。
高!佩服!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|SAS中文论坛  

GMT+8, 2026-2-3 23:35 , Processed in 0.097873 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表