你如何在SAS中按降序添加一个变量的多个组的行号?
How do you add a row Number in SAS by multiple groups with one variable in decending order?
我在 SAS 中发现了这段代码,它模仿 SQL 服务器中的以下 window 函数:
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;
"She's a beaut' Clark"...但是,如何模仿这个操作:
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;
但这不起作用。
ERROR: BY variables are not properly sorted on data set 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;
我在想我可以让一个变量暂时为负,但我不想更改数据,我正在寻找一种更优雅的解决方案。
您必须告诉数据步骤期望数据按降序排列(如果您提供的是降序排列)。
您似乎还没有完全理解 FIRST 的逻辑。最后。旗帜。如果它是 FIRST.VAR1,那么根据定义它就是 FIRST.VAR2。 VAR1 的这个值的第一个观察值也是 VAR1 的这个特定值内 VAR2 的第一个值的第一个观察值。
您要对 VAR1 和 VAR2 的每个组合中的观测值进行编号吗?
data WORK.want;
set WORK.Test;
BY var1 DESCENDING var2 ;
if first.var2 then n=1;
else n+1;
run;
或者对 VAR1 中 VAR2 的不同值进行编号?
data WORK.want;
set WORK.Test;
BY var1 DESCENDING var2 ;
if first.var1 then n=0;
if first.var2 then n+1;
run;
或者对 VAR2 和 VAR1 的不同组合进行编号?
data WORK.want;
set WORK.Test;
BY var1 DESCENDING var2 ;
if first.var2 then n+1;
run;
我在 SAS 中发现了这段代码,它模仿 SQL 服务器中的以下 window 函数:
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;
"She's a beaut' Clark"...但是,如何模仿这个操作:
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;
但这不起作用。
ERROR: BY variables are not properly sorted on data set 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;
我在想我可以让一个变量暂时为负,但我不想更改数据,我正在寻找一种更优雅的解决方案。
您必须告诉数据步骤期望数据按降序排列(如果您提供的是降序排列)。
您似乎还没有完全理解 FIRST 的逻辑。最后。旗帜。如果它是 FIRST.VAR1,那么根据定义它就是 FIRST.VAR2。 VAR1 的这个值的第一个观察值也是 VAR1 的这个特定值内 VAR2 的第一个值的第一个观察值。
您要对 VAR1 和 VAR2 的每个组合中的观测值进行编号吗?
data WORK.want;
set WORK.Test;
BY var1 DESCENDING var2 ;
if first.var2 then n=1;
else n+1;
run;
或者对 VAR1 中 VAR2 的不同值进行编号?
data WORK.want;
set WORK.Test;
BY var1 DESCENDING var2 ;
if first.var1 then n=0;
if first.var2 then n+1;
run;
或者对 VAR2 和 VAR1 的不同组合进行编号?
data WORK.want;
set WORK.Test;
BY var1 DESCENDING var2 ;
if first.var2 then n+1;
run;