BookmarkSubscribeRSS Feed

[SAS 활용 노하우] R VS SAS Part2

Started ‎03-15-2022 by
Modified ‎03-15-2022 by
Views 866

 

 

이번 게시글은 [SAS] R vs SAS part1의 이어지는 글로 데이터 분석 프로그램인 R 과 SAS의 비교하는 글 입니다.

IMPORTING DATA

이번 게시글은 새 SAS 데이터 세트를 다시 가져오기 위해 DATA 단계 또는 PROC 단계를 사용하여 저장된 원시 데이터 파일을 가져오는 방법에 관해서 서술하고 있습니다.

R에서는 read.csv 함수를 사용하고 CSV 파일에서 새 데이터 파일을 만들 수 있습니다.

데이터를 읽고 나면 COLNAMES와 같은 함수를 사용하여 데이터 프레임 열 이름을 실제로 변경할 수 있습니다.

IMPORTING with a DATA STEP

SAS에서 구분된 원시 데이터 파일을 읽으려면 DATA 단계를 사용할 수 있습니다. 구문은 수동 데이터 입력 구문과 매우 유사하지만 다음과 같이 DATALINS 문을 INFILE 문으로 대체하여 원시 데이터 파일을 읽습니다.

DATA output-data-set;
LENGTH variable <$> # variable <$> #…;
INFILE “data-file-path” DLM=‘delimiter’
INPUT variable <$> variable <$>…;
RUN;
 

위의 코드를 살펴보면, DATA 문으로 시작한 다음 새 SAS 데이터 세트 이름을 지정합니다.

이전과 동일하게 INPUT 문을 사용하여 변수 이름을 지정합니다. 변수가 문자 데이터 값인 경우 달러 기호를 사용합니다.

글자 수를 8자 이상으로 변경해야 할 경우 LENGH 문을 사용합니다.

이번에는 DATALINES 문 대신 INFILE 문을 사용합니다. (따옴표 안에 파일의 경로를 지정) 예를 들어, INFILE 문은 다음과 같을 수 있습니다.

 
 
infile “&path/example.csv”;
 

INFILE 문은 읽을 원시 데이터 파일을 식별하고 원시 데이터 파일이 공백 이외의 다른 것으로 구분되는 경우 구분 기호 옵션 DLM이 필요합니다.

예를 들어 데이터가 쉼표로 구분된 경우 INFILE 문은 다음과 같을 수 있습니다.

 
 
infile "&path\allnames.csv" dlm=',';

INFILE 문은 INPUT 문 앞에 와야 합니다. 몇 가지 일반적인 구분 기호는 .csv의 경우 DLM=','이고 탭으로 구분된 파일의 경우 DLM='09'x입니다.

 

 

 

IMPORT with PROC IMPORT

구분된 원시 데이터 파일을 읽는 또 다른 방법은 IMPORT 절차입니다.

DATA 단계에는 좀 더 많은 구문이 필요하지만 구분된 원시 데이터 파일을 정확히 읽는 방법을 더 잘 제어할 수 있습니다.

PROC IMPORT는 CSV 파일 또는 Excel 통합 문서와 같은 더 많은 구조의 파일과 함께 사용하는 데 유용한 방법입니다.

예를 들어, 데이터 파일의 첫 번째 행에 SAS 데이터 세트에서 사용하려는 변수 이름이 있는 경우 PROC IMPORT를 사용하면 이러한 이름을 SAS 변수 이름으로 매우 쉽게 사용할 수 있습니다.

PROC IMPORT 프로시저의 경우 열 이름이 있는 파일을 가져오는 구문은 다음과 같습니다.

 
 
PROC IMPORT OUT=data-set-name
DATAFILE= “data-file-path”
DBMS=identifier <REPLACE>;
GETNAMES=<yes,no>;
SHEET=<"sheet.name">
DATAROW=<#>;
RUN;
 
 

PROC IMPORT 문부터 시작합니다. OUT= 옵션에서 새 SAS 데이터 세트 이름을 지정합니다.

다음 옵션인 DATAFILE= 옵션을 사용하여 데이터 파일의 전체 경로를 지정할 수 있습니다(이전 INFILE 문과 유사).

DBMS= 옵션은 단순히 파일 식별자입니다. 예를 들어 CSV 파일을 읽는 경우 CSV를 지정하기만 하면 됩니다.

Excel 워크북을 사용하는 경우 xlsx를 지정합니다.

구분된 원시 데이터 파일을 읽는 다른 방법은 IMPORT문을 활용하는 것 입니다.

DATA 단계에는 좀 더 많은 구문이 필요하지만 구분된 원시 데이터 파일을 정확히 읽는 방법을 더 잘 제어할 수 있습니다.

PROC IMPORT는 CSV 파일 또는 Excel 통합 문서와 같은 더 많은 구조의 파일과 함께 사용하는 데 유용한 방법입니다.

예를 들어, 데이터 파일의 첫 번째 행에 SAS 데이터 세트에서 사용하려는 변수 이름이 있는 경우 PROC IMPORT를 사용하면 이러한 이름을 SAS 변수 이름으로 매우 쉽게 사용할 수 있습니다.

PROC IMPORT 프로시저의 경우 열 이름이 있는 파일을 가져오는 구문은 다음과 같습니다.

 

 

DATA data-table-name-new;
SET data-table-name-old;
RENAME old-var-1= new-var-1
old-var-2= new-var-2
…
old-var-n= new-var-n;
RUN;
 
 

# R

CSV 파일의 읽는 방법을 R로 나타내고 있습니다. 아래의 예에서는 DATA 스텝을 사용하여 구분된 원시 데이터 파일을 읽고 R 스크립트로 결과를 복제합니다.

 

#Import data
allnames = read.csv('path/allnames.csv, header = FALSE)

# change variable names
colnames(allnames) <- c("First_name", "Last_Name", "age", "height")

 

위의 예제에서는 SP4R 라이브러리의 ALL_NAMES 데이터 세트를 출력합니다.

변수 이름은First_Name, Last_Name, age, height 로 구성됩니다 . LENGTH 문을 활용하여 이름과 성 변수의 길이를 변경합니다.

I

NFILE 문에서 데이터 파일의 경로를 지정합니다.

DLM= 옵션을 사용하여 CSV 파일 유형의 구분 기호로 쉼표를 지정합니다. 이 프로그램을 실행하면 4열에 200개의 관측치가 있는 테이블이 표시되어야 합니다.

 
 
 # R Script
 
 
#Import data with variable names
baseball = read.csv('path/baseball.csv')

#Change variable names
colnames(baseball) <- c("Name", "Team", "At_Bats", "Hits", "Home_Runs", "Runs", "RBIs", "Leagye)
 
 
 

R에서 CSV 파일을 읽는 경우를 보여줍니다. 이 예에서는 구분된 원시 데이터를 읽습니다.

그림 2.3의 R 스크립트 결과를 복제하기 위해 PROC 단계가 있는 파일입니다.

R script 에 작성된 데이터 세트를 SA의 IMPORT Procedure을 활용하여 baseball 데이터 세트를 복사해보겠습니다.

# Duplicate the R scipt with PROC IMPORT

 
 
proc import out=sp4r.baseball
datafile= "&path\baseball.csv" DBMS=CSV REPLACE;
getnames=yes;
datarow=2;
run;
data sp4r.baseball;
set sp4r.baseball;
rename nAtBat = At_Bats
nHits = Hits
nHome = Home_Runs
nRuns = Runs
nRBI = RBIs
nError = Errors;
run;
 
 
 

PROC IMPORT 문에서 OUT= 옵션을 사용하여 데이터 세트 이름을 지정합니다.

DATAFILE= 옵션에서 Baseball.csv 데이터 파일의 경로를 지정합니다.

파일 형식은 물론 CSV입니다. REPLACE 옵션을 사용하여 동일한 이름의 SP4R 라이브러리에 있는 기존 데이터 세트를 덮어씁니다.

이제 이 CSV에는 SAS 데이터 세트 변수 이름으로 사용하려는 변수 이름이 있는 첫 번째 행이 있으므로 GETNAMES=yes 옵션을 사용합니다. 그런 다음 SAS에 행 2의 데이터 읽기를 시작하도록 지시합니다.

Reporting Data

이제 데이터를 SAS로 가져오는 방법을 알았으므로 데이터를 보고하고 일부 기능을 보고서로 가져오려고 합니다.

이를 위해 몇 가지 다른 PROC 단계를 사용하고 일부 결과를 반환합니다.

 

R에서 데이터 세트를 읽을 때 다음과 같은 다양한 기능을 사용할 수 있습니다.

- head()는 처음 6개 행을 인쇄하여 올바르게 읽을 수 있도록 합니다.

⁃ 이름() 변수 이름 보기

⁃ 데이터 집합의 차원을 보려면 dim()

⁃ 수준() 분류 변수의 고유한 수준 식별

R에서는 조건부로 변수를 인쇄할 수도 있습니다.

몇 가지 다른 절차를 통해 SAS에서 이 모든 작업을 수행할 수 있습니다.

 
 

PROC CONTENTS

아래의 예시는 reporting procedure을 수행하기 위해 CONTENTS문을 활용하는 것 입니다.

R 함수 dim() 및 names()와 동일한 정보를 제공합니다.

 
proc contents data=sp4r.cars varnum;
run;
 
image (1).png

 

CONTENS 문의 VARNUM 옵션을 사용하여 SAS가 변수를 인쇄하도록 합니다.

결과 페이지는 데이터 세트에 표시되는 순서대로 표시됩니다. VARNUM 옵션은 변수의 위치 번호를 반환하거나 또는 해당 변수가 존재하지 않는 경우에는 0을 반환합니다. PROC CONTENTS의 옵션으로 사용합니다.

 

 

PROC PRINT

 
FIRSTOBS= and OBS= Options
 

R에서 head() 함수를 재현하려면 PROC PRINT 문에서 FIRSTOBS= 및 OBS= 옵션을 사용하기만 하면 됩니다. 프로그램 2.6에서 볼 수 있듯이 괄호 안에 FIRSTOBS=1 및 OBS=6이라고 표시하면 출력 2.6과 같이 관측값 1에서 6까지만 출력됩니다.

 

# FISTOBS = and OBS = Options in Print Procedure

 

proc print data=sp4r.cars (firstobs=1 obs=6);
run;
 
image (2).png

 

 
 
FIRSTOBS= 및 OBS= 옵션에서 숫자를 변경할 수 있습니다. 관찰 10에서 20까지를 인쇄하려면 해당 옵션을 적절하게 변경할 수 있습니다. 기본적으로 PROC PRINT는 OBS= 옵션을 사용하지 않는 경우 모든 관찰과 모든 변수를 표시합니다.
 
 
 
 
 
 
 
 
Version history
Last update:
‎03-15-2022 10:35 PM
Updated by:
Contributors

sas-innovate-wordmark-2025-midnight.png

Register Today!

Join us for SAS Innovate 2025, our biggest and most exciting global event of the year, in Orlando, FL, from May 6-9. Sign up by March 14 for just $795.


Register now!

Article Labels
Article Tags