常用的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
来实现。
网友评论