我已经在SAS中发现了该代码,该代码模仿了SQL Server中的以下窗口函数:
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;
“她是个漂亮的克拉克” ...但是,一个人如何模仿这一操作:
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;
我以为我可以将一个变量设为临时负数,但我不想更改数据,我正在寻找一种更优雅的解决方案。
您是否要为VAR1和VAR2的每个组合中的观察值编号?
data WORK.want;
set WORK.Test;
BY var1 DECENDING var2 ;
if first.var2 then n=1;
else n+1;
run;
或在VAR1中编号VAR2的不同值?
data WORK.want;
set WORK.Test;
BY var1 DECENDING var2 ;
if first.var1 then n=0;
if first.var2 then n+1;
run;
或编号VAR2和VAR1的不同组合?
data WORK.want;
set WORK.Test;
BY var1 DECENDING var2 ;
n+first.var2 ;
run;