простые способы создания сводной переменной в SAS

Я ищу способ создать сводную переменную в SAS, которая будет автоматически добавлять наблюдения за каждой строкой до тех пор, пока не будет выполнено условие. Мне нужно было бы иметь возможность запускать и останавливать и сбрасывать эту переменную, если это необходимо.

Большое спасибо.


person Community    schedule 02.06.2009    source источник


Ответы (2)


Используйте Сохранить!

data test;
set test;
retain VarSummary;
VarSummary+YourVar;
if condition then VarSummary=SummatElse;
run;

Надеюсь, это имеет смысл!

person Allan Bowe    schedule 02.06.2009

Если вы собираетесь использовать оператор вроде

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