포스팅 목차
6. Display employee name and annual salary for all employees.
* 전체 직원의 이름(Name)과 연봉(sal)을 출력하시오
- [변수 생성 & 결측치 대체] 결측치 대체 후 신규 변수 생성
- null 값을 대체하기 위한 방법
|
1. 오라클(Oracle)
Oracle Programming |
select empno, ename, 12*sal+nvl(comm,0) as annualsal
from emp;
2. 파이썬(Pandas)
월 급여에 12를 곱하고 커미션이 존재하는 경우 해당 커미션을 더하여 연봉을 계산하여고, emp 테이블에 해당 금액으로 연봉(annualsal) 변수를 생성한다.
Python Programming |
emp["annualsal"] = 12 * emp["sal"] + emp["comm"].replace(np.nan,0)
emp[["empno","ename","annualsal"]].head()
Results |
empno | ename | annualsal | |
0 | 7369 | SMITH | 9600.0 |
1 | 7499 | ALLEN | 19500.0 |
2 | 7521 | WARD | 15500.0 |
3 | 7566 | JONES | 35700.0 |
4 | 7654 | MARTIN | 16400.0 |
3. R Programming (R Package)
월 급여에 12를 곱하고 커미션이 존재하는 경우 해당 커미션을 더하여 연봉을 계산하여고, emp 테이블에 해당 금액으로 연봉(annualsal) 변수를 생성한다. ifelse 구문을 사용하여서 comm 변수가 null인 경우 0으로 변경하여서 처리한다.
R Programming |
%%R
emp$annualsal <- 12 * emp["sal"] + ifelse(is.na(emp$comm),0,emp$comm)
emp[ , c("empno","ename","annualsal")]
Results |
# A tibble: 14 x 3
empno ename annualsal$sal
<dbl> <chr> <dbl>
1 7369 SMITH 9600
2 7499 ALLEN 19500
3 7521 WARD 15500
4 7566 JONES 35700
5 7654 MARTIN 16400
6 7698 BLAKE 34200
7 7782 CLARK 29400
8 7788 SCOTT 36000
9 7839 KING 60000
10 7844 TURNER 18000
11 7876 ADAMS 13200
12 7900 JAMES 11400
13 7902 FORD 36000
14 7934 MILLER 15600
replace_na 함수를 사용하여서 커미션(comm) 변수를 처리한다.
R Programming |
%%R
emp$annualsal <- 12 * emp["sal"] + replace_na(emp$comm,0)
emp[ , c("empno","ename","annualsal")]
Results |
# A tibble: 14 x 3
empno ename annualsal$sal
<dbl> <chr> <dbl>
1 7369 SMITH 9600
2 7499 ALLEN 19500
3 7521 WARD 15500
4 7566 JONES 35700
5 7654 MARTIN 16400
6 7698 BLAKE 34200
7 7782 CLARK 29400
8 7788 SCOTT 36000
9 7839 KING 60000
10 7844 TURNER 18000
11 7876 ADAMS 13200
12 7900 JAMES 11400
13 7902 FORD 36000
14 7934 MILLER 15600
4. R Dplyr Package
월 급여에 12를 곱하고 커미션이 존재하는 경우 해당 커미션을 더하여 연봉을 계산하여고, emp 테이블에 해당 금액으로 연봉(annualsal) 변수를 생성(mutate 구문)한다. ifelse 구문을 사용하여서 comm 변수를 처리한다.
R Programming |
%%R
emp %>% dplyr::mutate(annualsal = 12 * sal + ifelse(is.na(comm),0,comm)) %>% dplyr::select(empno,ename,annualsal)
Results |
# A tibble: 14 x 3
empno ename annualsal
<dbl> <chr> <dbl>
1 7369 SMITH 9600
2 7499 ALLEN 19500
3 7521 WARD 15500
4 7566 JONES 35700
5 7654 MARTIN 16400
6 7698 BLAKE 34200
7 7782 CLARK 29400
8 7788 SCOTT 36000
9 7839 KING 60000
10 7844 TURNER 18000
11 7876 ADAMS 13200
12 7900 JAMES 11400
13 7902 FORD 36000
14 7934 MILLER 15600
5. R sqldf Package
ifnull(오라클 의 nvl 함수 기능) 함수를 사용하여서 comm변수가 null인 경우 0으로 대체한다.
R Programming |
%%R
require(sqldf)
sqldf("select empno, ename, 12*sal+ifnull(comm,0) annualsal from emp")
Results |
empno ename annualsal
1 7369 SMITH 9600
2 7499 ALLEN 19500
3 7521 WARD 15500
4 7566 JONES 35700
5 7654 MARTIN 16400
6 7698 BLAKE 34200
7 7782 CLARK 29400
8 7788 SCOTT 36000
9 7839 KING 60000
10 7844 TURNER 18000
11 7876 ADAMS 13200
12 7900 JAMES 11400
13 7902 FORD 36000
14 7934 MILLER 15600
6. Python pandasql Package
ifnull(오라클 의 nvl 함수 기능) 함수를 사용하여서 comm변수가 null인 경우 0으로 대체한다.
Python Programming |
ps.sqldf("select empno, ename, 12*sal+ifnull(comm,0) annualsal from emp")
Results |
empno | ename | annualsal | |
0 | 7369 | SMITH | 9600.0 |
1 | 7499 | ALLEN | 19500.0 |
2 | 7521 | WARD | 15500.0 |
3 | 7566 | JONES | 35700.0 |
4 | 7654 | MARTIN | 16400.0 |
5 | 7698 | BLAKE | 34200.0 |
6 | 7782 | CLARK | 29400.0 |
7 | 7788 | SCOTT | 36000.0 |
8 | 7839 | KING | 60000.0 |
9 | 7844 | TURNER | 18000.0 |
10 | 7876 | ADAMS | 13200.0 |
11 | 7900 | JAMES | 11400.0 |
12 | 7902 | FORD | 36000.0 |
13 | 7934 | MILLER | 15600.0 |
7. R data.table Package
월 급여에 12를 곱하고 커미션이 존재하는 경우 해당 커미션을 더하여 연봉을 계산하여고, emp 테이블에 해당 금액으로 연봉(annualsal) 변수를 생성한다. ifelse 구문을 사용하여서 comm 변수가 null인 경우 0으로 변경하여서 처리한다.
R Programming |
%%R
DT <- data.table(emp)
dept_DT <- data.table(dept)
DT[ , .(empno, ename, annualsal = 12 * sal + ifelse(is.na(comm),0,comm) )]
Results |
empno ename annualsal
1: 7369 SMITH 9600
2: 7499 ALLEN 19500
3: 7521 WARD 15500
4: 7566 JONES 35700
5: 7654 MARTIN 16400
6: 7698 BLAKE 34200
7: 7782 CLARK 29400
8: 7788 SCOTT 36000
9: 7839 KING 60000
10: 7844 TURNER 18000
11: 7876 ADAMS 13200
12: 7900 JAMES 11400
13: 7902 FORD 36000
14: 7934 MILLER 15600
8. SAS Proc SQL
SAS Programming |
%%SAS sas
PROC SQL;
create table statsas_1 as
select empno,
ename,
12 * sal + coalesce(comm,0) as annualsal,
12 * sal + ifn(comm = .,0,comm) as annualsal_1
from emp;
QUIT;
PROC PRINT DATA=statsas_1(obs=5);RUN;
Results |
OBS | empno | ename | annualsal | annualsal_1 |
1 | 7369 | SMITH | 9600 | 9600 |
2 | 7499 | ALLEN | 19500 | 19500 |
3 | 7521 | WARD | 15500 | 15500 |
4 | 7566 | JONES | 35700 | 35700 |
5 | 7654 | MARTIN | 16400 | 16400 |
9. SAS Data Step
SAS Programming |
%%SAS sas
DATA statsas_2;
SET EMP;
annualsal = 12*sal+coalesce(comm,0);
annualsal_1 = 12*sal+ifn(comm = .,0,comm);
keep empno ename annualsal annualsal_1;
RUN;
PROC PRINT DATA=statsas_2(obs=5);RUN;
Results |
OBS | empno | ename | annualsal | annualsal_1 |
1 | 7369 | SMITH | 9600 | 9600 |
2 | 7499 | ALLEN | 19500 | 19500 |
3 | 7521 | WARD | 15500 | 15500 |
4 | 7566 | JONES | 35700 | 35700 |
5 | 7654 | MARTIN | 16400 | 16400 |
10. Python Dfply Package
Python Programming |
emp >> \
mutate(annualsal = 12*X.sal + X.comm.replace(np.nan,0) ) >> \
select(X.empno, X.empno, X.sal, X.comm, X.annualsal) >> \
head(5)
Results |
empno | sal | comm | annualsal | |
0 | 7369 | 800 | NaN | 9600.0 |
1 | 7499 | 1600 | 300.0 | 19500.0 |
2 | 7521 | 1250 | 500.0 | 15500.0 |
[SQL, Pandas, R Prog, Dplyr, SQLDF, PANDASQL, DATA.TABLE] SQL EMP 예제로 만나는 테이블 데이터 처리 방법 리스트
'통계프로그램 비교 시리즈 > 프로그래밍비교(Oracle,Python,R,SAS)' 카테고리의 다른 글
[관측치 선택] 복수의 조건문을 만족하는 관측치 출력 - 8 (0) | 2021.08.04 |
---|---|
[관측치 선택] 조건문을 만족하는 관측치 출력 - 7 (0) | 2021.08.04 |
[변수 생성] 신규 변수를 생성하여 데이터 출력 - 5 (0) | 2021.08.03 |
[변수 선택] 특정 변수를 지정하여서 데이터 출력 - 4 (0) | 2021.08.03 |
[변수 선택] 특정 변수를 지정하여서 데이터 출력 - 3 (0) | 2021.08.03 |
댓글