#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;