BookmarkSubscribeRSS Feed

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

Started ‎03-14-2022 by
Modified ‎03-14-2022 by
Views 1,303

 

 

SAS와 R은 모두 데이터 분석을 위한 중요한 도구입니다. SAS는 데이터 액세스, 데이터 관리, 데이터 분석, 통계 분석 및 데이터 프리젠테이션에 사용할 수 있는 소프트웨어 솔루션 모음이자 프로그래밍 언어입니다. SAS는 많은 양의 데이터를 처리하고 거의 모든 데이터 분석 작업을 수행할 수 있습니다.

반면에, R은 오픈소스로 통계 분석, 그래프 작성 및 보고를 위해 연구 커뮤니티에서 사용됩니다.

또한, 객체 지향 프로그래밍 언어입니다. 객체 지향 프로그래밍 언어란, 함수의 결과가 객체에 저장되며 필요에 따라 객체에서 원하는 결과를 가져옵니다.

SAS는 데이터 테이블을 중심으로 돌아가며 출력물을 만들고 인쇄하는 절차를 사용한다. 결과를 새 데이터 테이블에 저장할 수 있습니다.

이번 게시글에서는 SAS 프로그래밍 기술을 독립적으로 학습하는 데 도움이 되는 일반적인 방법으로 SAS와 R을 간략히 비교하겠습니다.

아래의 표는 SAS와 R의 주요 차이에 대해서 설명하고 있습니다.

 

image.png

 

SAS에는 명령줄이 없습니다. 결과를 반환하려면 코드를 실행해야 합니다.

SAS Programs

SAS 프로그램은 하나 이상의 단계로 이루어진 시퀀스입니다.

SAS에는 DATA 단계와 PROC 단계의 두 가지 단계 유형만 있습니다.

- DATA Step : 입력 소스에서 읽고 SAS 데이터 세트를 생성합니다.

- Proc Step : SAS 데이터 세트를 읽고 처리하며, 종종 출력 보고서를 생성합니다.

SAS는 아래의 명령문이 입력되었을 때, 종료되었다고 인식합니다.

- RUN statement (대체로 사용)

- QUIT statement (일부)

대부분의 SAS 단계는 RUN 문으로 끝납니다.

SAS Programs Versus R Programming

 

DATA 단계와 PROC 단계가 있는 SAS 프로그램의 예를 보여줍니다. 두 SAS 문이 모두 RUN 문으로 끝나는 반면 R 함수는 괄호로 시작하고 끝나는 것을 볼 수 있습니다.

 

image.png

 

 

 

 

SAS Syntax Rules

SAS 문은 일반적으로 키워드로 시작하고 항상 세미콜론으로 끝납니다. 키워드는 문 유형을 식별하고 세미콜론은 문을 끝냅니다.

구문 오류는 SAS 문의 철자 또는 문법의 오류입니다. SAS는 실행이 시작되기 전에 각 SAS 문을 컴파일할 때 구문 오류를 찾습니다. 구문 오류의 일반적인 예는 다음과 같습니다.

- 오타(Misspelled keywords)

- unmatched quotation mark

- invalid options

- missing Semicolons

 

 

 

 

Accessing Data in SAS Libraries

SAS 테이블은 SAS 라이브러리에 저장됩니다. SAS 라이브러리는 참조되고 하나의 단위로 저장되는 SAS 파일의 모음입니다.

각 파일은 라이브러리의 구성원입니다. Work는 SAS 세션 기간 동안 SAS 테이블을 저장하고 액세스할 수 있는 임시 라이브러리입니다.

SAS HELP는 SAS 세션 중에 액세스할 수 있는 샘플 SAS 테이블이 포함된 영구 라이브러리입니다.

SASuser는 모든 SAS 세션에서 SAS 테이블을 저장하고 액세스하는 데 사용할 수 있는 영구 라이브러리입니다.

사용자는 자신만의 SAS 라이브러리를 생성할 수 있습니다.

- 사용자 정의 라이브러리는 영구적입니다. 테이블은 사용자가 삭제할 때까지 저장됩니다.

- 사용자 정의 라이브러리는 운영 환경의 파일 시스템 내에 구현됩니다.

- SAS 세션에서는 자동으로 사용할 수 없습니다.

 

Calling R from SAS

이 섹션에서는 SAS/IML에서 R로 작업을 진행합니다. 데이터를 R로 내보내고 R 코드를 IML로 직접 작성할 수 있습니다.

이번 섹션에서 사용된 예제는 R의 RandomForest Package를 사용합니다. 출생 데이터 세트를 R로 보내고 randomForest() 함수를 사용하여 예측 모델을 만든 다음 결과를 SAS로 반환합니다.

 

 

 

proc iml;
call ExportDataSetToR("work.birth","birth");
submit / r;
library(randomForest)
rf = randomForest(BWT ~ SMOKE + HT + LWT + PTL,
data=birth,ntree=200,importance=TRUE)
summary(rf)
actual = birth$BWT
pred = predict(rf,data=birth)
actual.pred = cbind(actual,pred)
colnames(actual.pred) <- c("Actual","Predicted")
endsubmit;
call ImportDataSetFromR("Rdata","actual.pred");
quit;

위의 코드를 살펴보면, SAS/IML을 호출하고 Work 라이브러리에 있는 출생 데이터 세트를 R로 보내고 데이터 프레임의 이름도 출생으로 지정했습니다.

SUBMIT 및 ENDSUBMIT 문 사이에 R 코드를 작성하였습니다.

R의 randomForest 패키지와 randomForest() 함수를 사용하여 BWT를 종속 변수로 사용하고 Smoke, HT, LWT 및 PTL을 독립 변수로 사용하여 모델을 추정합니다.

SUMMARY 문을 사용하여 분석 세부 정보를 콘솔에 인쇄합니다.

마지막으로 주어진 모델에서 실제 값과 예측 값으로 데이터 프레임을 만들고 변수 이름을 Actual 및 Predicted로 지정합니다.

OUTPUT DATA의 새 탭에 열려 있는 데이터 세트를 반환했습니다. 데이터 프레임을 Rdata라는 이름의 SAS 데이터 세트로 되돌립니다.

 

image.png

 

 

Create a New Data Set

R에서는 새로운 데이터 세트를 생성하기 위해 4개의 벡터(이름, 성, 나이 및 키)를 생성한 다음 그림 2.1과 같이 이들을 결합하여 데이터 프레임을 생성할 수 있습니다.

R Script

 

First_name = c("Jordan","Bruce","Walter","Henry","JeanClaude")
Last_name = c("Bakerman","Wayne","White","Hill","VanDamme")
age = c(27,35,51,65,55)
height = c(68,70,70,66,69)

#create Data frame
example_data = data.frame(fist_name,last_name,age,height)

 

이제 SAS에서 R 스크립트를 복제해 보겠습니다.

SAS

 

data sp4r.example_data;
length First_Name $ 25 Last_Name $ 25;
input First_Name $ Last_Name $ age height;
datalines;
Jordan Bakerman 27 68
Bruce Wayne 35 70
Walter White 51 70
Henry Hill 65 66
JeanClaude VanDamme 55 69
;
run;

 

EXAMPLE_DATA라는 데이터 세트를 만들고 SP4R 라이브러리에 저장합니다.

INPUT 문에는 4개의 변수가 있습니다. FIRST_NAME 및 LAST_NAME은 문자 값이므로 달러 기호가 필요합니다. AGE 및 HEIGHT는 숫자 변수입니다.

다음으로 데이터 라인을 지정하고 모든 데이터를 별도의 라인에 입력합니다.

DATA 문을 완료하기 위해 RUN 문을 입력하였습니다.

변수의 바이트 수를 변경하려면 LENGTH 문을 사용해야 했습니다. LENGTH 문에서 FIRST_NAME 및 LAST_NAME의 길이를 지정할 수 있습니다. 여기서는 25자를 길이로 사용했지만 상한선만 지정하면 최대 문자 수의 값을 알 필요가 없습니다.

 

 

 

Duplicate the R Script in SAS Another Way

 

data sp4r.example_data2;
length First_Name $ 25 Last_Name $ 25;
input First_Name $ Last_Name $ age height @@;
datalines;
Jordan Bakerman 27 68 Bruce Wayne 35 70 Walter White 51 70
Henry Hill 65 66 JeanClaude VanDamme 55 69
;
run;

 

위의 코드에서는 첫 번째 데이터가 있고 그 직후에 두 번째와 세 번째 데이터가 있습니다.

이 데이터를 읽으려면 INPUT 문에서 후행 @@ 기호를 사용해야 합니다. 이 기호는 SAS가 라인을 잡고 계속해서 새로운 관측값으로 데이터를 읽도록 지시합니다. 후행 @@ 기호를 사용하지 않으면 이 데이터 세트에 Jordan Bakerman과 Henry Hill이라는 2개의 관측값만 있습니다.

Version history
Last update:
‎03-14-2022 10:15 PM
Updated by:
Contributors

sas-innovate-white.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.

 

Early bird rate extended! Save $200 when you sign up by March 31.

Register now!

Article Labels
Article Tags