码迷,mamicode.com
首页 > 其他好文 > 详细

数据处理之求和语句,retain语句

时间:2014-05-15 09:41:11      阅读:215      评论:0      收藏:0      [点我收藏+]

标签:style   blog   class   code   java   c   

先看下面的一个例子:

bubuko.com,布布扣
DATA A;
INPUT X Y @@;
S+X;
DATALINES;
3 5 7 9 20 21
PROC PRINT;
RUN;
bubuko.com,布布扣

衍生的新变量s为与x变量的求和,我们看结果

Obs X Y S

1 3 5 3
2 7 9 10
3 20 21 30

上面的S+X语句看上去怪怪的,能不能换成S=S+X;这样比较符合我们的变成习惯。那么将S+X;替换为S=S+X;后我们看结果:

Obs X Y S

1 3 5 .
2 7 9 .
3 20 21 .

结果出乎意料,这里的S变量的值全部为默认你缺失值.;或者根本就没对S变量进行赋值,原因是没有对S赋初值,既然这样那就对S变量赋初值0吧,加上S=0;这一语句试试:

Obs X Y S

1 3 5 3
2 7 9 7
3 20 21 20

结果是S变量的值与X的值完全一样,这是因为sas数据步读取数据是循环的过程,加上S=0;语句,实际上是每次循环时重新对S变量赋值为0,所以S变量的值会与X的值完全一样,要想S变量实现求和,并且能用S=S+X;该语句,这就要用到RETAIN语句的作用了;

bubuko.com,布布扣
DATA A;
INPUT X Y @@;
RETAIN S 0;
S=S+X;
DATALINES;
3 5 7 9 20 21
PROC PRINT;
RUN;
bubuko.com,布布扣

结果和第一段代码的结果一样;

这里,RETAIN S 0;语句相当于为S赋初值为0;但是和S=0;这一语句不一样的是:当数据部循环第二次读取数据时,会跳过RETAIN语句的执行,即循环时,S变量会一直保存计算值而不会被再次初始化。这就是RETAIN语句的作用。

数据处理之求和语句,retain语句,布布扣,bubuko.com

数据处理之求和语句,retain语句

标签:style   blog   class   code   java   c   

原文地址:http://www.cnblogs.com/bowenlearning/p/3728991.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!