получить номер строки на шаге данных с помощью sas
есть ли способ сделать раздел over, чтобы получить номер строки в sas? В sql я бы сказал:
Select region,company, ROW_NUMBER() OVER(PARTITION BY region ORDER BY Name)
From companyData;
Я хочу сделать это в наборе данных предпочтительно
2 ответов
вы можете сделать это на шаге данных легко, используя оператор by, он и сделать текущую сумму:
proc sort data=myData; by region name; run;
Data myData;
Set myData;
By company;
if first. company then n=1;
else n+1;
run;
также ennmuarete все obs вы можете использовать встроенные функции:
DATA COMPANYDATA;
SET COMPANYDATA;
ROW_NUM=_N_;
RUN;
как упоминал Джо, вы можете установить формат для своего row_num в зависимости от того, сколько obs вы получите в этой группе.
для дублирования SQL ROW_NUMBER
функция Windowing, вы должны отсортировать набор данных по и the PARTITION
и ORDER BY
положения. На следующем шаге данных SET
сортированный набор данных только переменной (- АМИ) раздела и используйте FIRST.
автоматическое управление переменными назначьте новую переменную номера строки.
вот решение для ваших пример:
proc sort data=companyData;
by region name;
run;
data want;
set companyData;
by region;
if first.region then row_number = 1;
else row_number + 1;
run;
уведомления BY
оператор на шаге данных соответствует the PARTITION BY
предложение в ANSI SQL, но PROC SORT
шаг также сортируется по столбцам в ORDER BY
предложения. Также обратите внимание, что если запрос, который вы "переносите", содержит ORDER BY
SQL предложение, вы должны следовать этому с другим PROC SORT
шаг.