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

[문자 함수] 문자열 결합 함수 - 143 (오라클 SQL, R, Python, SAS)

by 기서무나구물 2022. 12. 31.

포스팅 목차

     

    143. Produce the output of the EMP table “EMPLOYEE_AND_JOB” for ename and job?

     

    * ename과 job을 연결하여서 신규 변수 “EMPLOYEE_AND_JOB”을 생성하여 출력하시오.


    • Oracle : '||' 문자열 결합, concat() 문자열 결합 함수
    • 파이썬 Pandas : '+' 문자열 결합
    • R 프로그래밍 : paste()
    • R Dplyr Package : stringi::stri_join()
    • R sqldf Package : '||' 문자열 결합
    • Python pandasql Package : '||' 문자열 결합
    • R data.table Package : stringi::stri_join()
    • SAS Proc SQL : '||' 문자열 결합, STRIP(), CATS() 문자열 결합 함수
    • SAS Data Step : '||' 문자열 결합, STRIP(), CATS() 문자열 결합 함수
    • Python Dfply Package : '+' 문자열 결합
    • 파이썬 Base 프로그래밍 :

     


    1. Oracle(오라클)

    파이프(‘||’) 연산자를 사용하여서 사원명(Ename)과 직무(‘Job’)을 연결하여 신규 변수 ‘EMPLOYEE_JOB’를 생성하여 출력한다.

    Oracle Programming
    SELECT ename,job,
           ename||'_AND_'||job               as emp_job_1,
           concat(concat(ename,'_AND_'),job) as emp_job_2
    FROM   EMP

     


    2. Python Pandas(파이썬)

    연결(‘+’) 연산자를 사용하여서 사원명(Ename)과 직무(‘Job’)을 텍스트와 연결하여 신규 변수 ‘EMPLOYEE_JOB’를 생성하여 출력한다.

     

    Python Programming
    import copy
    withmooc = copy.copy(emp)
    
    
    withmooc['str_combined_1'] = withmooc['ename'] +'_and_' + withmooc['job']
    withmooc.head()

     

    Results
      empno ename job mgr hiredate sal comm deptno str_combined_1
    0 7369 SMITH CLERK 7902.0 1980/12/17 800 NaN 20 SMITH_and_CLERK
    1 7499 ALLEN SALESMAN 7698.0 1981/02/20 1600 300.0 30 ALLEN_and_SALESMAN
    2 7521 WARD SALESMAN 7698.0 1981/02/22 1250 500.0 30 WARD_and_SALESMAN
    3 7566 JONES MANAGER 7839.0 1981/04/02 2975 NaN 20 JONES_and_MANAGER
    4 7654 MARTIN SALESMAN 7698.0 1981/09/28 1250 1400.0 30 MARTIN_and_SALESMAN

     


    3. R Programming (R Package)

    paste 함수를 사용하여서 사원명(Ename)과 직무(‘Job’)을 텍스트와 연결하여 신규 변수 ‘EMPLOYEE_JOB’를 생성하여 출력한다.

     

    R Programming
    %%R
    
    withmooc <- emp
    
    withmooc['EMPLOYEE_JOB'] <- paste(withmooc[['ename']],'_and_',withmooc[['job']],sep="")
    
    withmooc[1:5, ]

     

    Results
    # A tibble: 5 x 10
      empno ename  job        mgr hiredate     sal  comm deptno salary EMPLOYEE_JOB       
      <dbl> <chr>  <chr>    <dbl> <date>     <dbl> <dbl>  <dbl> <chr>  <chr>              
    1  7369 SMITH  CLERK     7902 1980-12-17   800    NA     20 $920   SMITH_and_CLERK    
    2  7499 ALLEN  SALESMAN  7698 1981-02-20  1600   300     30 $1,840 ALLEN_and_SALESMAN 
    3  7521 WARD   SALESMAN  7698 1981-02-22  1250   500     30 $1,438 WARD_and_SALESMAN  
    4  7566 JONES  MANAGER   7839 1981-04-02  2975    NA     20 $3,421 JONES_and_MANAGER  
    5  7654 MARTIN SALESMAN  7698 1981-09-28  1250  1400     30 $1,438 MARTIN_and_SALESMAN

     


    4. R Dplyr Package

    stringi::stri_join() 함수를 사용하여서 사원명(Ename)과 직무(‘Job’)을 텍스트와 연결하여 신규 변수 ‘EMPLOYEE_JOB’를 생성하여 출력한다.

     

    R Programming
    %%R
    library(formattable)
    library(scales)
    
    withmooc <- emp
    
    withmooc %>% 
      dplyr::mutate(EMPLOYEE_JOB  = stringi::stri_join(ename,'_and_',job,sep="")) %>%
      head()

     

    Results
    # A tibble: 6 x 10
      empno ename  job        mgr hiredate     sal  comm deptno salary EMPLOYEE_JOB       
      <dbl> <chr>  <chr>    <dbl> <date>     <dbl> <dbl>  <dbl> <chr>  <chr>              
    1  7369 SMITH  CLERK     7902 1980-12-17   800    NA     20 $920   SMITH_and_CLERK    
    2  7499 ALLEN  SALESMAN  7698 1981-02-20  1600   300     30 $1,840 ALLEN_and_SALESMAN 
    3  7521 WARD   SALESMAN  7698 1981-02-22  1250   500     30 $1,438 WARD_and_SALESMAN  
    4  7566 JONES  MANAGER   7839 1981-04-02  2975    NA     20 $3,421 JONES_and_MANAGER  
    5  7654 MARTIN SALESMAN  7698 1981-09-28  1250  1400     30 $1,438 MARTIN_and_SALESMAN
    6  7698 BLAKE  MANAGER   7839 1981-03-01  2850    NA     30 $3,278 BLAKE_and_MANAGER  

     


    5. R sqldf Package

    파이프(‘||’) 연산자를 사용하여서 사원명(Ename)과 직무(‘Job’)을 연결하여 신규 변수 ‘EMPLOYEE_JOB’를 생성하여 출력한다.

     

    R Programming
    %%R
    
    sqldf(" SELECT ename||'_AND_'||job AS EMPLOYEE_JOB 
            FROM   emp ") %>% head()

     

    Results
             EMPLOYEE_JOB
    1     SMITH_AND_CLERK
    2  ALLEN_AND_SALESMAN
    3   WARD_AND_SALESMAN
    4   JONES_AND_MANAGER
    5 MARTIN_AND_SALESMAN
    6   BLAKE_AND_MANAGER

     


    6. Python pandasql Package

    파이프(‘||’) 연산자를 사용하여서 사원명(Ename)과 직무(‘Job’)을 연결하여 신규 변수 ‘EMPLOYEE_JOB’를 생성하여 출력한다.

     

    Python Programming
    ps.sqldf(" SELECT ename||'_AND_'||job AS EMPLOYEE_JOB FROM emp ").head()

     

    Results
      EMPLOYEE_JOB
    0 SMITH_AND_CLERK
    1 ALLEN_AND_SALESMAN
    2 WARD_AND_SALESMAN
    3 JONES_AND_MANAGER
    4 MARTIN_AND_SALESMAN

     


    7. R data.table Package

    stringi::stri_join() 함수를 사용하여서 사원명(Ename)과 직무(‘Job’)을 텍스트와 연결하여 신규 변수 ‘EMPLOYEE_JOB’를 생성하여 출력한다. 사용자가 지정한 변수명 리스트에 NULL을 지정하여서 출력 결과에 변수를 삭제한다.

     

    R Programming
    %%R
    
    DT <- data.table(emp)
    
    DT[, EMPLOYEE_JOB := stringi::stri_join(ename,'_and_',job,sep="")][1:5, ][,c("job","hiredate","salary"):=NULL ]

     

    Results
       empno  ename  mgr  sal comm deptno        EMPLOYEE_JOB
    1:  7369  SMITH 7902  800   NA     20     SMITH_and_CLERK
    2:  7499  ALLEN 7698 1600  300     30  ALLEN_and_SALESMAN
    3:  7521   WARD 7698 1250  500     30   WARD_and_SALESMAN
    4:  7566  JONES 7839 2975   NA     20   JONES_and_MANAGER
    5:  7654 MARTIN 7698 1250 1400     30 MARTIN_and_SALESMAN

     


    stringi::stri_join() 함수를 사용하여서 사원명(Ename)과 직무(‘Job’)을 텍스트와 연결하여 신규 변수 ‘EMPLOYEE_JOB’를 생성하여 출력한다. NOT 연산자(‘!’)를 사용하여서 삭제될 변수를 지정한다.

     

    R Programming
    %%R
    
    DT <- data.table(emp)
    
    DT[, EMPLOYEE_JOB := stringi::stri_join(ename,'_and_',job,sep="")][1:5, ][,!c("job","hiredate","salary") ]

     

    Results
       empno  ename  mgr  sal comm deptno        EMPLOYEE_JOB
    1:  7369  SMITH 7902  800   NA     20     SMITH_and_CLERK
    2:  7499  ALLEN 7698 1600  300     30  ALLEN_and_SALESMAN
    3:  7521   WARD 7698 1250  500     30   WARD_and_SALESMAN
    4:  7566  JONES 7839 2975   NA     20   JONES_and_MANAGER
    5:  7654 MARTIN 7698 1250 1400     30 MARTIN_and_SALESMAN

     


    8. SAS Proc SQL

    파이프(‘||’) 연산자 및 Cats() 함수를 사용하여서 사원명(Ename)과 직무(‘Job’)을 연결하여 신규 변수 ‘EMPLOYEE_JOB’를 생성하여 출력한다.

    SAS Programming
    %%SAS sas
    
    PROC SQL;
      create table STATSAS_1 as
        select empno,ename,job,
               STRIP(ename)||'_and_'||STRIP(job) as emp_job_1,
               cats(ename,'_and_',job)           as emp_job_2
        from   emp;
    QUIT;
    PROC PRINT data=STATSAS_1(obs=3);RUN;

     

    Results
    OBS empno ename job emp_job_1 emp_job_2
    1 7369 SMITH CLERK SMITH_and_CLERK SMITH_and_CLERK
    2 7499 ALLEN SALESMAN ALLEN_and_SALESMAN ALLEN_and_SALESMAN
    3 7521 WARD SALESMAN WARD_and_SALESMAN WARD_and_SALESMAN

     


    9. SAS Data Step

     

    SAS Programming
    %%SAS sas
    
    data STATSAS_2;
     set emp;
         emp_job_1 = STRIP(ename)||'_and_'||STRIP(job);
         emp_job_2 = cats(ename,'_and_',job);
         keep empno ename job emp_:;
    run;
    PROC PRINT data=STATSAS_2(obs=3);RUN;

     

    Results
    OBS empno ename job emp_job_1 emp_job_2
    1 7369 SMITH CLERK SMITH_and_CLERK SMITH_and_CLERK
    2 7499 ALLEN SALESMAN ALLEN_and_SALESMAN ALLEN_and_SALESMAN
    3 7521 WARD SALESMAN WARD_and_SALESMAN WARD_and_SALESMAN

     


    10. Python Dfply Package

     

    Python Programming
    emp                                                 >> \
      mutate( EMPLOYEE_JOB = X.ename +'_and_' + X.job ) >> \
      select( ~X.job, ~X.hiredate )                     >> \
      head()

     

    Results
      empno ename mgr sal comm deptno EMPLOYEE_JOB
    0 7369 SMITH 7902.0 800 NaN 20 SMITH_and_CLERK
    1 7499 ALLEN 7698.0 1600 300.0 30 ALLEN_and_SALESMAN
    2 7521 WARD 7698.0 1250 500.0 30 WARD_and_SALESMAN
    3 7566 JONES 7839.0 2975 NaN 20 JONES_and_MANAGER
    4 7654 MARTIN 7698.0 1250 1400.0 30 MARTIN_and_SALESMAN

     


     

     

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

    반응형

    댓글