Среднее вменение с SQL - PullRequest
       7

Среднее вменение с SQL

0 голосов
/ 04 апреля 2020
PROC SQL;

    UPDATE GUEST 
    SET 
    STAY_DURATION = ( CASE WHEN STAY_DURATION EQ . THEN MEAN(STAY_DURATION ) 
    ELSE STAY_DURATION END AS STAY_DURATION FORMAT 8.0 END); 

RUN;

Я бы хотел вставить среднее значение прямо в набор данных, не проходя процесс создания новой таблицы, а затем обновить основной набор данных. Ну, я сделал это, но я хочу использовать вложенный оператор CASE с запросом на обновление для нескольких переменных.

Ответы [ 2 ]

0 голосов
/ 05 апреля 2020

Обычно не рекомендуется перезаписывать ваши входные данные. Создайте новый набор данных с вашими изменениями данных. Вы можете использовать PRO C STDIZE для замены отсутствующих значений средним значением переменной.

proc stdize data=guest out=want reponly missing=mean;
  var stay_duration;
run;

In SQL

proc sql;
  create table WANT as 
    select *
         , coalesce(stay_duration,mean(stay_duration)) as stay_duration_imputed
    from guest
  ;
quit;
0 голосов
/ 04 апреля 2020

Вы можете использовать подзапрос для расчета:

PROC SQL;    
    UPDATE GUEST 
        SET STAY_DURATION = (SELECT AVG(STAY_DURATION) FROM GUEST)
        WHERE STAY_DURATION IS NULL;

Если вы хотите просто использовать PROC SQL, вы можете использовать два шага:

PROC SQL;   
    CREATE TABLE AVG_GUEST AS 
        SELECT AVG(STAY_DURATION) as AVG_SD FROM GUEST;
RUN;

PROC SQL;
    UPDATE GUEST 
        SET STAY_DURATION = (SELECT AVG_SD FROM AVG_GUEST)
        WHERE STAY_DURATION IS NULL;
...