如何通过多个组在SAS中添加一个行号,并以降序排列一个变量?

问题描述 投票:0回答:1

我已经在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; 

我以为我可以将一个变量设为临时负数,但我不想更改数据,我正在寻找一种更优雅的解决方案。

sas row-number enterprise-guide
1个回答
0
投票
您似乎也不太了解FIRST的逻辑。和最后。标志。如果它是FIRST.VAR1,那么根据定义它是FIRST.VAR2。对VAR1的该值的第一个观察值也是对该特定值或VAR1内的VAR2的第一个值的观察。

您是否要为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;
© www.soinside.com 2019 - 2024. All rights reserved.