BookmarkSubscribeRSS Feed

[SAS/R] 결측치 처리 후, 대체

Started ‎04-29-2024 by
Modified ‎04-29-2024 by
Views 1,099

 

본 게시글은 SAS와 R을 비교하는 글로 결측치를 처리하는 방법을 비교해보고자 합니다.

사용 데이터는 basic.csv 데이터 입니다.

 

 image.png

 

 

 

Q. basic 데이터 중 F1칼럼에 결측치가 있으면 F1칼럼의 Median 값으로 대체하고, city 칼럼별로 F1칼럼의 평균값을 구한다.

[R]

 

library(dplyr)

df=read.csv('../input/bigdatacertificationkr/basic1.csv')

apply(is.na(df),2,sum) #1

df1=df %>% 
group_by(city) %>%  #2
mutate(  #3
pre_f1=ifelse(is.na(f1),median(f1,na.rm=T),f1))   #4

mean(df1$pre_f1)

 

 

 

1. Apply

 

행(Row) 또는 열(Column) 단위의 연산을 쉽게 할 수 있도록 지원하는 함수.

* 행(1) 단위로 mean 연산 : iris 데이터를 행(1) 단위로 평균값을 구하는 코드입니다.

 

apply(iris, 1, mean)

 * 열(column) 단위로 mean 연산

apply(iris, 2, mean)

 

2. Group by

 

데이터를 요약하는 기능으로, Excel의 pivot과 기능이 유사합니다.

데이터를 그룹 별로 묶는 함수로, 데이터에서 특정 컬럼을 지정해서 그룹 별로 묶을 수 있습니다.

3. Mutate

 

mutate (dataframe, 새로운 column명 = 기존 column을 조합한 수식)
 

여러 파생변수를 만들 수 있는 명령문으로, mutate 함수는 위와 같은 Syntax를 사용하며 변수명만 입력하여 새로운 변수를 만들 수 있어 코드가 간결해진다는 장점이 있습니다.

4. Ifelse

 

ifelse(조건, O, X)

조건을 만족하면 O를, 조건을 만족하지 않으면 X를 출력하는 명령문입니다.

이를 응용하여, 변수X가 결측값을 가질 경우 결측값을 값 K(예 : 0)로 대체하고 싶다면 그 구조는 다음과 같습니다.

 
ifelse(is.na(변수X), K, 변수X)

위 코드는 변수x가 Na 값이면, K값을 출력하고, Na가 아니면 변수X를 추출하는 코드입니다.

 

 

 

 

[SAS]

 

/* 1. */
proc import datafile="/home/u45061472/basic1.csv" out=basic
    dbms=csv replace;
    getnames=yes;
run;
/* 2. */
proc means data=basic noprint;
    var f1;
    output out=median_f1 median=median_f1;
run;
/*3.*/
data basic;
    if _n_ eq 1 then set median_f1;
    if missing(f1) then f1 = median_f1;
    drop median_f1;
run;

proc means data=basic mean;
    var f1;
run;

 

 

 

  1. PROC IMPORT

외부 데이터를 불러오는 명령문입니다.

  • DATAFILE = : 파일 위치 또는 파일명을 지정.

  • DBMS = : 파일 형식을 설정.

  • OUT = : 원본 데이터는 그대로 유지되고, 원하는 데이터 형식의 데이터를 생성합니다.

  • REPLACE : 이미 데이터가 존재하면 데이터 세트를 덮어쓰는 것 입니다. 코드를 실행할 때마다 데이터 세트의 이름을 변경하거나 삭제할 필요가 없어서 실행 단계를 단순화 할 수 있습니다.

  • getnames: 첫번째 행에 변수 명이 포함되어 있는 경우 사용

2. PROC MEAN

통계적 요약을 수행하는 명령문입니다.

  • DATA = : 작업할 데이터 셋 지정

  • Noprint: 결과를 출력하지 않는 옵션입니다.

  • var: 분석할 변수를 지정.

  • OUTPUT OUT = median_f1 : median_f1이라는 dataset을 생성.

  • median = median_f1: f1변수의 중앙값을 계산하고 그 결과를 새로운 데이터셋인 median_f1에 저장.

3. Data basic ~

  • _N_ : 데이터 스텝에서 데이터 셋을 읽거나 수정하는 작업으로 현재 데이터 스텝의 번호를 의미합니다.

  • 데이터 스텝이 실행할 때마다 1씩 증가합니다.

  • if _n_ eq 1 then set median_f1; : 데이터의 첫번째 해인 경우에는 median_f1값을 불러와서 데이터 값을 변수 f1에 대입합니다.

  • if missing(f1) then f1 = median_f1; : f1변수 값이 결측치일 경우에는 medain_f1값으로 대체합니다.

  • drop median_f1: median_f1변수는 중앙값을 저장하기 위해 사용되었고, 삭제합니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Version history
Last update:
‎04-29-2024 08:04 AM
Updated by:
Contributors

sas-innovate-white.png

Our biggest data and AI event of the year.

Don’t miss the livestream kicking off May 7. It’s free. It’s easy. And it’s the best seat in the house.

Join us virtually with our complimentary SAS Innovate Digital Pass. Watch live or on-demand in multiple languages, with translations available to help you get the most out of every session.

 

Register now!

Article Labels
Article Tags