gpt4 book ai didi

sql - SAS 中删除重复项类似于 Oracle 中的 ROW_NUMBER () 函数

转载 作者:行者123 更新时间:2023-12-03 04:02:30 25 4
gpt4 key购买 nike

我在 oracle 中使用 SCOTT 模式,想要删除像这样的重复值...

SELECT   EMPNO, JOB, SAL
FROM ( SELECT EMPNO,
JOB,
SAL,
ROW_NUMBER () OVER (PARTITION BY EMPNO ORDER BY SAL) R_ID
FROM EMP_TEST
ORDER BY EMPNO)
WHERE R_ID = 1

现在我想在 SAS 中执行此操作...并且以下代码执行良好...

PROC SQL;
connect to oracle (PATH="database_name" USER=SCOTT PASSWORD=tiger);
CREATE TABLE WORK.EMP_DEDUPL AS SELECT * from connection to oracle(
SELECT EMPNO, JOB, SAL
FROM ( SELECT EMPNO,
JOB,
SAL,
ROW_NUMBER () OVER (PARTITION BY EMPNO ORDER BY SAL) R_ID
FROM SCOTT.EMP_TEST
ORDER BY EMPNO)
WHERE R_ID = 1
);
DISCONNECT FROM oracle;
QUIT;

但是当我必须在数据集级别执行此类查询时,我遇到了错误。

假设我的 EMP_TEST 不是 oracle 表,它实际上是特定路径中的 SAS 数据集,并且我想在删除重复值后从 EMP_TEST 数据集创建另一个名为 EMP_DEDUP 的数据集。这是我的方法。

PROC SQL; 
CREATE TABLE WORK.EMP_DEDUPL AS SELECT * from connection to oracle(
SELECT EMPNO, JOB, SAL
FROM ( SELECT EMPNO,
JOB,
SAL,
ROW_NUMBER () OVER (PARTITION BY EMPNO ORDER BY SAL) R_ID
FROM path.EMP_TEST
ORDER BY EMPNO)
WHERE R_ID = 1
;
QUIT;

这里我发现语法错误......可能是SAS不支持ROW_NUMBER()函数。任何可能的解决方案..任何人都可以建议...

最佳答案

听起来您希望每个 EMPNO 具有最低的 SAL,对吗?

proc sort data=path.emp_test;
by empno sal;
run;

data work.emp_dedupl;
set path.emp_test;
by empno sal;
if first.empno;
run;

SAS 不支持 PARTITION OVER,因此它实际上不允许您在 SQL 中执行此操作。

关于sql - SAS 中删除重复项类似于 Oracle 中的 ROW_NUMBER () 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21325335/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com