如何在proc sql中获取观察的行号,类似于procsql中的datastep的_N_?
例如
proc sql outobs=5;
select case mod(<something>, 2)
when 0 then "EVEN"
else "ODD"
end
from maps.africa
end;
Run Code Online (Sandbox Code Playgroud)
想:
Row
----------
1 odd
2 even
3 odd
.
.
.
Run Code Online (Sandbox Code Playgroud)
Monotonic()确实存在并且在某些情况下可能有用,但它与行号不同,并且使用起来很危险,特别是考虑到SQL是一种高度优化的语言,可以很好地将查询分成多个线程 - 在这种情况下monotonic()会失败实现你想要的.特别是它可以在不同的数据集上,在不同的SAS安装上,甚至在不同的日子里表现不同.
安全的方式做,这是创建一个view与_n_复制到一个永久的变量.
data africa_v/view=africa_v;
set maps.africa;
rownum=_n_;
run;
proc sql;
select case mod(rownum, 2)
when 0 then "EVEN"
else "ODD"
end
from africa_v;
quit;
Run Code Online (Sandbox Code Playgroud)
这几乎没有增加任何开销 - 几毫秒 - 并取得了相同的结果,但安全性确信您有正确的订购.这两个查询(这个和shipt)在我的机器上运行几乎相同的时间,在误差范围内(所有记录的2.95s对2.98s).
| 归档时间: |
|
| 查看次数: |
14653 次 |
| 最近记录: |