2014-09-03 2 views
1

Мне нужно создать частоту в переменной, а не произвольный freq выход, а фактическую переменную в наборе данных. Я использовал приведенный ниже код, чтобы создать счетчик по идентификатору.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 автоматически сделает для вас).

Смежные вопросы