본문 바로가기
통계프로그램 비교 시리즈/프로그래밍비교(Oracle,Python,R,SAS)

[기초 통계량 - 합계 계산] 수치형 데이터 합계 계산, 결측치 대체 - 27 (오라클 SQL, R, Python, SAS)

by 기서무나구물 2021. 8. 7.

포스팅 목차

     

    27. Display the total salary being paid to all employees.

     

    * 모든 직원에 지급되는 총 급여를 계산하라.


    • Oracle : sum(), nvl()
    • 파이썬 Pandas : sum, replace()
    • R 프로그래밍 : sum(), ifelse(), replace_na()
    • R Dplyr Package : dplyr::summarise(), ifelse()
    • R sqldf Package : sum(), ifnull()
    • Python pandasql Package : sum(), ifnull()
    • R data.table Package : sum(), ifelse
    • SAS Proc SQL : sum(), ifn(), coalesce()
    • SAS Data Step : proc summary, sum=, coalesce, ifn
    • Python Dfply Package : summarize(), .replace()
    • 파이썬 Base 프로그래밍 :

     


    1. 오라클(Oracle)

    • 개별 직원의 급여와 수수료를 더하여 해당 직원의 총 급여를 계산한다.
    Oracle Programming
    select sum(sal)+sum(nvl(comm,0)) as sal_tot,
           sum(sal + nvl(comm,0))    as sal_tot_1
    from   emp;

     


    2. 파이썬(Pandas)

    개별 직원의 급여와 수수료를 더하여 총 급여를 계산한다. 결측치(nan)가 포함된 연산은 nan을 반환하기 때문에, 결측치 값을 사전에 0으로 변경 후 계산한다.

    Python Programming
    sum(emp["sal"]) + sum(emp["comm"].replace(np.nan,0))

     

    Results
    31225.0

     


     

    Python Programming
    sum(emp["sal"]) + sum(emp["comm"])

     

    Results
    nan

     


    3. R Programming (R Package)

    개별 직원의 급여와 수수료를 더하여 총 급여를 계산한다. 결측치(nan)가 포함된 연산은 nan을 반환하기 때문에, ifelse구문을 사용하여서 결측치 값을 사전에 0으로 변경 후 계산한다.

    R Programming
    %%R
    
    sum(emp$sal) + sum(ifelse(is.na(emp$comm),0,emp$comm))

     

    Results
    [1] 31225

     


    개별 직원의 급여와 수수료를 더하여 총 급여를 계산한다. 결측치(nan)가 포함된 연산은 nan을 반환하기 때문에, replace_na구문을 사용하여서 결측치 값을 사전에 0으로 변경 후 계산한다.

    R Programming
    %%R
    
    sum(emp$sal) + sum(replace_na(emp$comm,0))

     

    Results
    [1] 31225

     


    4. R Dplyr Package

    개별 직원의 급여와 수수료를 더하여 총 급여를 계산한다. 결측치(nan)가 포함된 연산은 nan을 반환하기 때문에, ifelse구문을 사용하여서 결측치 값을 사전에 0으로 변경 후 계산한다.

    R Programming
    %%R
    
    emp %>% dplyr::summarise(tot_sal = sum(sal+ifelse(is.na(comm),0,comm)))

     

    Results
    # A tibble: 1 x 1
      tot_sal
        <dbl>
    1   31225

     


    5. R sqldf Package

    개별 직원의 급여와 수수료를 더하여 총 급여를 계산한다. 결측치(nan)가 포함된 연산은 nan을 반환하기 때문에, 결측치 값을 사전에 0으로 변경 후 계산한다.

    R Programming
    %%R
    sqldf("select sum(sal)+sum(ifnull(comm,0)) tot_sal from emp")

     

    Results
      tot_sal
    1   31225

     


    6. Python pandasql Package

     

    Python Programming
    ps.sqldf("select sum(sal)+sum(ifnull(comm,0)) tot_sal from emp")

     

    Results
      tot_sal
    0 31225.0

     


    7. R data.table Package

    개별 직원의 급여와 수수료를 더하여 총 급여를 계산한다. 결측치(nan)가 포함된 연산은 nan을 반환하기 때문에, ifelse구문을 사용하여서 결측치 값을 사전에 0으로 변경 후 계산한다.

    R Programming
    %%R
    
    DT          <- data.table(emp)
    dept_DT     <- data.table(dept)
    
    DT[, .(tot_sal = sum(sal, na.rm = TRUE) + sum(ifelse(is.na(comm), 0, comm), na.rm = TRUE))]

     

    Results
       tot_sal
    1:   31225

     


     

    R Programming
    %%R
    
    DT          <- data.table(emp)
    dept_DT     <- data.table(dept)
    
    DT[, .(tot_sal = sum(sal + ifelse(is.na(comm), 0, comm)))]

     

    Results
       tot_sal
    1:   31225

     


    8. SAS Proc SQL

     

    SAS Programming
    %%SAS sas
    
    PROC SQL;
      CREATE TABLE STATSAS_1 AS
        select sum(sal)+sum(coalesce(comm,0))     AS tot_sal_1,
               sum(sal)+sum(ifn(comm = .,0,comm)) AS tot_sal_2,
    
               sum(sal + coalesce(comm,0))        AS tot_sal_3,
               sum(sal + ifn(comm = .,0,comm))    AS tot_sal_4
        from   emp;
    QUIT;
    PROC PRINT;RUN;

     

    Results
    OBS tot_sal_1 tot_sal_2
    1 31225 31225

     


    9. SAS Data Step

     

    SAS Programming
    %%SAS sas
    
    DATA STATSAS_2;
     SET EMP;
         tot_sal_1 = SAL + coalesce(comm,0);
         tot_sal_2 = SAL + ifn(comm = .,0,comm);
    RUN;
    
    PROC SUMMARY DATA=STATSAS_2;
         VAR tot_sal_1 tot_sal_2;
         OUTPUT OUT=STATSAS_21(DROP=_:) SUM=;
    RUN;
    PROC PRINT;RUN;

     

    Results
    OBS tot_sal_1 tot_sal_2
    1 31225 31225

     


    10. Python Dfply Package

     

    Python Programming
    emp >> summarize( tot_sal = ( X.sal + X.comm.replace(np.nan,0) ).sum() )

     

    Results
      tot_sal
    0 31225.0

     

     


     

    [SQL, Pandas, R Prog, Dplyr, SQLDF, PANDASQL, DATA.TABLE]   SQL EMP 예제로 만나는 테이블 데이터 처리 방법 리스트

    반응형

    댓글