我正在使用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()函数。有什么可能的解决方案吗?请问有人能建议一下吗...
connection to oracle(
,但是它的闭括号缺失了。这是正确的语法吗? - SanROW_NUMBER()
函数。当已经有一个完全可用的程序可以执行此操作时,为什么还要使用PROC SQL
来去重您的SAS数据集呢?请参见“带有NODUPKEY选项的PROC SORT”。 - user1509107