2014-09-03 86 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將自動爲您執行)。