Как переместить строку вверх или вниз в рабочей таблице SAS

#sas

#sas

Вопрос:

У меня есть рабочая таблица в SAS, и я хочу переместить последнюю строку таблицы во 2-ю последнюю строку. Возможно ли сделать это программно? Если да, то как?

Заранее спасибо

Комментарии:

1. Затем, что вы хотите сделать со второй последней строкой? Удалить ее?

2. Как правило, SAS не рекомендует обращаться к столбцам и строкам по индексу. Однако, если вам нужна функциональность индекса, IML предоставляет это. В противном случае обычно существуют другие способы достижения того, что вам нужно, хотя и немного иначе, чем вы ожидаете.

Ответ №1:

Используйте эту SET опцию POINT= для чтения из определенных строк на основе последовательной позиции.

 data have;
  do row = 1 to 10;
    output;
  end;
run;

data want;
  do row_index = 1 to row_count-2, row_count, row_count-1;
    set have nobs=row_count point=row_index;
    output;
  end;
  STOP;
run;
 

введите описание изображения здесь

Комментарии:

1. Вы можете просто использовать один цикл выполнения. do row_index = 1 to row_count-2,row_count,row_count-1;

2. Хороший звонок @Tom, изменен

Ответ №2:

Я думаю, это то, что вы хотите

 data class;
   set sashelp.class nobs=n;
   if _N_ = n-1 then delete;
run;
 

Ответ №3:

Если у вас нет id переменной в вашем наборе данных, вы можете сначала создать ее. В следующем случае вызывается ваш набор данных have :

 data temp;
  set have;
  id   1;
run;
 

Затем вы можете просто вычесть единицу из переменной id, когда она равна max(id), и добавить единицу, когда она равна max (id) минус единица. Наконец, вы упорядочиваете свой новый набор данных по идентификатору. Это переключит позиции двух последних строк.

 proc sql;
create table want as
select
case when id=max(id) then id-1 
     when id=max(id)-1 then id 1
     else id end as id,
*
from temp
order by id;
quit; 
 

Если в вашем исходном наборе данных уже есть переменная с именем id, просто замените все id в приведенном выше коде на имя новой переменной, и она будет делать то, что вы хотите.

Ответ №4:

Еще одно использование MODIFY.

 data class;
   _obs_ 1;
   set sashelp.class;
   run;
data class;
   do point=nobs-2;
      modify class point=point nobs=nobs;
      remove;
      output;
      end;
   stop;
   run;
proc print;
   run;