SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

12
返回列表 发新帖
楼主: shiyiming
打印 上一主题 下一主题

大家好,又要各位帮忙了!――编程序

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
11#
 楼主| 发表于 2004-10-25 17:01:19 | 只看该作者

Re: 谢谢~!

data y;
input a b ;
retain a1-a5 0;
bb=lag2(b);
a1=a2;
a2=a3;
a3=a4;
a4=a5;
a5=a;
if bb>=10 then output ;
keep a1-a5;
cards;
1 2
2 3
3 4
4 13
5 4
6 3
7 3
8 4
9 2
10 8
11 6
12 9
13 7
14 16
15 4
16 9
;
run;
proc print data=y;
run;
说你不动脑筋呀你还真不动脑筋.
a,b反了嘛改一下字母就行了嘛.
试一下吧.
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
12#
 楼主| 发表于 2004-10-25 17:06:08 | 只看该作者

主题真讨厌

The SAS System        13:58 Monday, October 25, 1999  12

                                Obs    a1    a2    a3    a4    a5

                                 1      2     3     4     5     6
                                 2     12    13    14    15    16
给你看看结果吧
免得你又说我理解错误
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
13#
 楼主| 发表于 2004-10-25 17:36:15 | 只看该作者

想想吧

为了避免你认为不了解lag函数就不可以简单完成的理解.
我以下过程没用任何高深的函数.
你才能认识到思考的重要性.
data y;
input a b ;
retain b1-b5 a1-a5 0;
b1=b2;
b2=b3;
b3=b4;
b4=b5;
b5=b;
a1=a2;
a2=a3;
a3=a4;
a4=a5;
a5=a;
if b3>=10 then output ;
keep a1-a5;
cards;
1 2
2 3
3 4
4 13
5 4
6 3
7 3
8 4
9 2
10 8
11 6
12 9
13 7
14 16
15 4
16 9
;
run;
proc print data=y;
run;
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
14#
 楼主| 发表于 2004-10-25 19:07:39 | 只看该作者

继续探讨!

假如我现在需要bi对应的前20个ai(-20<=i<=0)以及后30个ai(0<=i<=30) ,如果还用上面的函数的话,岂不麻烦得要死!?有没有好的函数解决这个问题?
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
15#
 楼主| 发表于 2004-10-25 20:19:01 | 只看该作者

不想写主题

你们这些年轻人真是很挑,又不想花时间去想。
要求还高得很。要前多少位,后多少位自己去改,我不想让数据行太长,让大家看起累。
data y;
input a b;
retain aa1-aa5 0;
array aa(1:5);
do i=1 to 4;
aa{i}=aa{i+1};
end;
aa{5}=a;
if lag2(b)>=10 then output ;
keep aa1-aa5;
cards;
1 2
2 3
3 4
4 13
5 4
6 3
7 3
8 4
9 2
10 8
11 6
12 9
13 7
14 16
15 4
16 9
;
run;
proc print data=y;
run;
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
16#
 楼主| 发表于 2004-10-26 00:30:47 | 只看该作者

re

以前没用过lag,用上了真是简单。感谢ahuige的指点。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
17#
 楼主| 发表于 2004-10-26 09:16:27 | 只看该作者

lag

看到有人提到lagN(var),这里要说两句了.
大家千万不要把这个lagN(var)当成取值为当前记录的前N条记录的var变量的取值的函数了.
嘿嘿.虽然看起来好象是这个样子.
有兴趣的人来试试下面的程序.
data ahuige;
input a;
b=lag2(a);
cards;
1
2
3
4
5
6
7
;
run;

data ahuige;
set ahuige;
c=lag2(a);
a=100;
c=lag2(a);
a=2;
run;

proc print;
run;
                                      Obs    a    b     c

                                       1     2    .      .
                                       2     2    .      .
                                       3     2    1    100
                                       4     2    2    100
                                       5     2    3    100
                                       6     2    4    100
                                       7     2    5    100
从结果可以看到,C的取值不等于任何一个a值.而判断取c值时当前记录的前二条a值已经变为2.但c并不等于2.
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
18#
 楼主| 发表于 2004-11-11 23:20:38 | 只看该作者

试试这个简单的程序

data test;
input a b;
if b>10 then do;
c=a-1;d=a-2;e=a+1;f=a+2;
end;
cards;
1 2
3 4
....
;
run;
你是湖南的啊,老乡哦!请问你在哪?QQ联系:52183878
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
19#
 楼主| 发表于 2012-7-22 23:27:21 | 只看该作者

Re: 大家好,又要各位帮忙了!――编程序

Mark
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-6 09:50 , Processed in 0.084838 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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