BookmarkSubscribeRSS Feed

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

Started ‎04-29-2024 by
Modified ‎04-29-2024 by
Views 530

 

본 게시글은 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 2025: Call for Content

Are you ready for the spotlight? We're accepting content ideas for SAS Innovate 2025 to be held May 6-9 in Orlando, FL. The call is open until September 25. Read more here about why you should contribute and what is in it for you!

Submit your idea!

Article Labels
Article Tags