Я использую схему 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 не является таблицей оракула, это фактически набор данных SAS по определенному пути, и я хочу создать другой набор данных с именем EMP_DEDUP из набора данных EMP_TEST после удаления повторяющихся значений. Это мой подход.
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(
, но ее закрывающая скобка отсутствует. Это правильный синтаксис? - person San   schedule 24.01.2014ROW_NUMBER()
. Зачем возиться сPROC SQL
для дедупликации набора данных SAS, когда уже есть отличная процедура, позволяющая сделать именно это. См.PROC SORT with NODUPKEY option
- person   schedule 24.01.2014