Я обнаружил этот код в SAS, который имитирует следующую оконную функцию на SQL сервере:
ROW_NUMBER() OVER (PARTITION BY Var1,var2 ORDER BY var1, var2)
=
data want;
set have
by var1 var2;
if first.var1 AND first.var2 then n=1;
else n+1;
run;
"Она красавица, Кларк" .. но, как один mimi c эта операция:
ROW_NUMBER() OVER (PARTITION BY Var1,var2 ORDER BY var1, var2 Desc)
Я убедился, что у меня есть раньше:
PROC SORT DATA=WORK.TEST
OUT=WORK.TEST;
BY var1 DECENDING var2 ;
RUN;
data WORK.want;
set WORK.Test;
by var1 var2;
if first.var1 AND last.var2 then n=1;
else n+1;
run;
Но это не работает.
ОШИБКА: переменные BY неправильно отсортированы в наборе данных WORK.TEST.
Пример набора данных:
data test;
infile datalines dlm='#';
INPUT var1 var2;
datalines;
1#5
2#4
1#3
1#6
1#9
2#5
2#2
1#7
;
run;
Я думал, что могу сделать одну переменную временной отрицательной, но я не хочу менять данные, я ищу более элегантное решение.