美文网首页
Retain语句实现计数举例

Retain语句实现计数举例

作者: 野藤_ | 来源:发表于2020-05-09 11:08 被阅读0次

    常用的Retain用法是生成有序数字,给SAS数据集中的记录编号。如果不适用Retain语句,那么出现的结果就不是我们想要的。

    Without Retain 数据集结果

    我们想要的结果是,SUBJECT的序列号是1 2 3。但是,目前的结果都为缺失。什么原因呢?在每次读入X之后,SUBJECT还处于缺失没有赋值的状态,缺失值+1依旧是缺失值。使用Retain语句可以使得SUBJECT的保留之前的值,我们来看下代码。

    With Retain 数据集结果 日志结果

    通过日志结果,可以看到Retain语句先给SUBJECT赋值为0,这使得在读入X数值之前已经有值不再缺失了,这时候就可以继续运算了,实现想要的效果。这里有一点注意,在结果数据集中SUBJECT在第一列,X在第二列,这是因为Retain语句有排列变量的作用。

    计数在SAS数据集操作中很普遍,还有一种特殊的SUM语句实现上面的效果,代码如下。

    Sum 语句 数据集结果 Sum 日志结果

    我们可以看到,这个日志结果和之前Retain日志结果基本一样,只不过数据集中变量的顺序不一样。这里的Sum语句subject+1相当于retain subject 0; subject = subject + 1;,只是Sum语句没有实现变量排列的功能。

    在SAS中计数还有一个方法可以实现这样的计数,对于每一行记录都有都有个本身的计数,是上面日志中的N变量。我们可以直接引用这个变量,代码如下。

    _N_ 变量 日志结果

    可以看到序列以1递增,如果公差大于1的话可以用subject = _N_ + n来实现。

    相关文章

      网友评论

          本文标题:Retain语句实现计数举例

          本文链接:https://www.haomeiwen.com/subject/nnvhnhtx.html