zoukankan      html  css  js  c++  java
  • 数据处理之求和语句,retain语句

    先看下面的一个例子:

    DATA A;
    INPUT X Y @@;
    S+X;
    DATALINES;
    3 5 7 9 20 21
    PROC PRINT;
    RUN;

    衍生的新变量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语句的作用了;

    DATA A;
    INPUT X Y @@;
    RETAIN S 0;
    S=S+X;
    DATALINES;
    3 5 7 9 20 21
    PROC PRINT;
    RUN;

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

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

  • 相关阅读:
    [poj解题]1017
    [算法] aov图拓扑算法
    【supervisord】部署单进程服务的利器
    【python】一个备份把文件备份到邮箱的python实现
    【GO】关于GO的浅显总结
    iOS开发快捷键
    iOS开发笔记
    VS2012智能提示无效解决方案
    国内几个WindowPhone广告平台
    纪念自己的第四个App:秘密Secret
  • 原文地址:https://www.cnblogs.com/bowenlearning/p/3728991.html
Copyright © 2011-2022 走看看