Если вы собираетесь использовать оператор вроде
VarSummary + 1 ;
OR
VarSummary + <expression> ;
тогда вам на самом деле не нужен оператор RETAIN.
Кроме того, если вы используете оператор BY в своем ШАГЕ ДАННЫХ, у вас есть доступ к переменным FIRST и LAST (данные должны быть отсортированы по переменной BY). FIRST и LAST либо имеют значение 1, либо 0. Когда переменная BY находится на первом значении FIRST. = 1 и когда он находится на последнем значении LAST. = 1. Они оба могут быть равны 1, когда имеется только 1 запись byVariable, и они оба могут быть равны 0, когда записей byVariable более 2 (при средних записях).
ПЕРВЫЙ и ПОСЛЕДНИЙ могут помочь определить, когда сбрасывать СОХРАНЕННЫЕ переменные. (ПЕРВЫЙ и ПОСЛЕДНИЙ будут в PDV, но не будут записаны в выходной набор данных, поэтому их НЕ нужно УДАЛИТЬ).
Пример
(Результат этого примера, вероятно, будет получен с помощью PROC, но я надеюсь, что это демонстрирует, как можно использовать FIRST и LAST)
proc sort data=sasuser.laguardia out=work.dest;
by dest ;
run ;
data work.destination_summary (keep=dest dest_count total_count) ;
set work.dest ;
by dest ;
total_count + 1 ;
if first.dest then dest_count = 1 ;
if not first.dest and not last.dest then dest_count + 1 ;
if last.dest then do ;
dest_count + 1 ;
output ;
end ;
run ;
proc print data=work.destination_summary label noobs ;
var dest dest_count total_count;
label Dest="Destination"
dest_count="Count"
total_count= "Total Count";
run ;
person
Jay Corbett
schedule
04.06.2009