2014-09-03 61 views
1

我需要在变量中创建一个频率,而不是一个proc freq输出,而是数据集中的一个实际变量。我使用下面的代码通过ID创建一个运行计数。SAS:创建一个频率变量

data work.frequencycounts; 
set work.dataset; 
count+1; 
by id; 
if first.id then count=1; 
run; 

但是,我想要的变量不是运行计数,而是最终计数。我试图添加

frequency=last.count; 

到数据步骤的结尾,但没有奏效。

回答

2

SAS中的每一行在大部分时间都是分开处理的。您无法直接获取数据集中的收益,并将其放在每一行上。

幸运的是,大约有100种方法可以实现这一点。

下面是与您的方法最相似的一个。

data work.frequencycounts; 
do _n_ =1 by 1 until (last.id); 
    set work.dataset; 
    by id; 
    if first.id then count=0; 
    count+1; 
end; 
frequency=count; 
do _n_ = 1 by 1 until (last.id); 
    set work.dataset; 
    by id; 
    output; 
end; 
run; 

这相当直接地通过一次,计算计数,然后将它放在数据集的第二遍。这是一个双DoW循环。

另一个选择是执行PROC FREQ并将其合并 - 真的很容易。第三种方法是使用PROC SQL来计算SQL步骤中的计数并将其合并(SAS将自动为您执行)。