kzen.dev
  • Вопросы
  • Метки
  • Пользователи
Оповещения
Вознаграждения
Регистрация
После регистрации, сможете получать уведомления об ответах и комментариях на Ваши вопросы.
Вход
Если у Вас уже есть аккаунт, войдите чтобы проверить новые уведомления.
Тут будут вознаграждения за добавленные вопросы, ответы и комментарий.
Дополнительно
Источник
Редактировать
 Brandon
Brandon
Вопрос

Добавление порядковых номеров в SAS

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

1 2012-08-31T12:51:48+00:00 3
Michael Chernick
Michael Chernick
Редактировал вопрос 31-го августа 2012 в 2:12
Программирование
sas
 Joe
Joe
31-го августа 2012 в 1:36
2012-08-31T13:36:34+00:00
Дополнительно
Источник
Редактировать
#17094412

Вы можете сделать что-то вроде этого:

data want;
set have;
autonumber+1;
run;

Существует также _N_ - это количество итераций цикла шага данных, которое в обычном шаге данных равно номеру строки. Он не записывается в набор данных, но к нему всегда можно получить доступ как к обычной переменной.

 Joe
Joe
Редактировал ответ 31-го августа 2012 в 1:44
5
0
Решение / Ответ
 itzy
itzy
31-го августа 2012 в 1:35
2012-08-31T13:35:35+00:00
Дополнительно
Источник
Редактировать
#17094411

Когда вы читаете набор данных в SAS, _n_ означает номер наблюдения. Это должно сработать для вас:

data new;
 set old;
 seqno = _n_;
run;
4
0
 Joe
Joe
31-го августа 2012 в 2:42
2012-08-31T14:42:30+00:00
Дополнительно
Источник
Редактировать
#17094413

Классический пример того, что _N_ не совпадает с номером наблюдения - цикл DoW, используемый для добавления суммы переменной к каждой строке для каждого значения переменной класса. Обратите внимание, что _N_ возвращает не номер строки, а номер итерации - в данном случае цикл data step выполняет итерацию один раз для каждого значения x, а не один раз для каждой строки, поскольку строки втягиваются через цикл do...until.

data have;
do x = 1 to 5;
  do y = 1 to 3; 
    z=floor(7*ranuni(7));
    rownum+1;
    output;
  end;
end;
run;

data test;
 do t=1 by 1 until (last.x);
    set have;
    by x;
    sum_z+z;
 end;
 do t=1 by 1 until (last.x);
    set have;
    by x;
    output;
    put x= z= sum_z= _N_= rownum=;
 end;
 sum_z=0;
run;

Журнал:

x=1 z=2 sum_z=12 _N_=1 rownum=1
x=1 z=5 sum_z=12 _N_=1 rownum=2
x=1 z=5 sum_z=12 _N_=1 rownum=3
x=2 z=5 sum_z=13 _N_=2 rownum=4
x=2 z=3 sum_z=13 _N_=2 rownum=5
x=2 z=5 sum_z=13 _N_=2 rownum=6
x=3 z=5 sum_z=12 _N_=3 rownum=7
x=3 z=5 sum_z=12 _N_=3 rownum=8
x=3 z=2 sum_z=12 _N_=3 rownum=9
x=4 z=3 sum_z=12 _N_=4 rownum=10
x=4 z=5 sum_z=12 _N_=4 rownum=11
x=4 z=4 sum_z=12 _N_=4 rownum=12
x=5 z=6 sum_z=13 _N_=5 rownum=13
x=5 z=3 sum_z=13 _N_=5 rownum=14
x=5 z=4 sum_z=13 _N_=5 rownum=15
3
0
Добавить вопрос
Категории
Все
Технологий
Культура / Отдых
Жизнь / Искусство
Наука
Профессии
Бизнес
Пользователи
Все
Новые
Популярные
1
Ilya Smirnov
Зарегистрирован 1 день назад
2
Денис Васьков
Зарегистрирован 2 дня назад
3
Dima Patrushev
Зарегистрирован 4 дня назад
4
sirojidddin otaboyev
Зарегистрирован 1 неделю назад
5
Елена Гайдамамакинат
Зарегистрирован 1 неделю назад
JA
RU
© kzen.dev 2023
Источник
stackoverflow.com
под лицензией cc by-sa 3.0 с атрибуцией