SAS я могу сделать наблюдения SAS процесса в обратном направлении - PullRequest
7 голосов
/ 27 мая 2009

Я знаю, что Sas начинает с наблюдения в верхней части набора данных при обработке и переходит к следующему, пока не достигнет нижнего наблюдения, но есть ли простой способ заставить sas сначала обработать нижнее наблюдение, а затем продолжить свой путь наверх?

Ответы [ 3 ]

14 голосов
/ 27 мая 2009

Вы можете использовать nobs и point , чтобы обработать его в обратном направлении без каких-либо промежуточных шагов. Вот пример:

data backwards;
  do k= nobs to 1 by -1;
   set sashelp.class nobs = nobs point=k;
   output;
  end;
  stop;
run;
proc print data=sashelp.class;run;
proc print data=backwards;run;

См. Стр. 2 из этого pdf для всех сочных деталей.

8 голосов
/ 27 мая 2009

Вы, конечно, можете изменить данные в обратном порядке, а затем обработать их сверху вниз. Добавьте переменную к набору данных, которая действует как индекс .. затем сортируйте набор данных по убыванию этой переменной.

data work.myData ;
 set work.myData ;
 indx = _n_ ;
run ;

proc sort data=work.myData ;
 by descending indx ;
run ;
1 голос
/ 08 марта 2019

Вы можете изменить порядок своих наблюдений за один шаг , используя PROC SQL:

proc sql;
   create table work.cars as
   select *
   from sashelp.cars
   order by monotonic() desc;
quit;

Ключ здесь - порядок по monotonic () desc , что переводится как "сортировка по убыванию чисел наблюдения".

Кроме того, вы можете создать представление (вместо создания таблицы), которое будет ссылаться на исходную таблицу, но в обратном порядке номеров наблюдений:

proc sql;
   create view work.cars_rev as
   select *
   from sashelp.cars
   order by monotonic() desc;
quit;
...