반응형

[SAS] 변수 계산 (비교 연산) - DATA, SET, GE, LE, NE, IN, MIN, MAX

조건에 따라 변수를 바꾸고 싶을 때가 있다. 예를 들어, 인구를 1) AST 40 이상, 2) AST 20 이상 40 미만, 3) AST 20 미만으로 나누고 싶을 수 있다. 이런 경우에 사용하는 비교 연산에 대해 알아보고자 한다. 내용은 다음과 같다.

 

1) >, <, >=, <=, =, ^=

2) MAX

3) MIN

4) IN, NOT IN

 

*실습용 데이터는 아래 링크를 클릭하면 다운로드할 수 있습니다.

2022.08.04 - [공지사항 및 소개] - 분석용 데이터 (update 22.10.06)

 

분석용 데이터 (update 22.10.06)

2022년 08월 29일 버전입니다. 변수는 계속하여 추가될 예정입니다. 다음 카테고리에 있는 글에서 이용된 데이터입니다. - 기술 통계 - 통계 프로그램 사용 방법 1) 엑셀 파일 2) CSV 파일 3) 코드북

medistat.tistory.com

시작하기 위해 라이브러리를 만들고, 파일을 불러온다.

라이브러리 만드는 방법: 2022.08.05 - [통계 프로그램 사용 방법/SAS] - [SAS] 라이브러리 만들기 - LIBNAME

파일 불러오는 방법: 2022.08.05 - [통계 프로그램 사용 방법/SAS] - [SAS] 데이터 불러오기 및 저장하기 - PROC IMPORT, PROC EXPORT

 

*라이브러리 지정하기;
LIBNAME hong "C:/Users/User/Documents/Tistory_blog";

*파일 불러오기;
PROC IMPORT
DATAFILE="C:\Users\user\Documents\Tistory_blog\Data.xlsx"
DBMS=EXCEL
OUT=hong.df
REPLACE;
RUN;

 

상황: 전체 인구를 1) AST 40 이상, 2) AST 20 이상 40 미만, 3) AST 20 미만으로 나누고 싶을 때

 AST는 연속 변수로 코딩되어 있음을 코드북에서 확인할 수 있다. 우리는 ALT_S3이라는 변수를 새로 만들어 다음과 같이 코딩되기를 바란다.

AST_S2 0 1 2
AST 40 이상 20 이상 40 미만 20 미만

 이를 실행하는 방법은 여러 가지가 있는데, 코드를 하나씩 살펴보면 다음과 같다. 변수를 바꿀 때 쓰는 DATA-SET구문에 대한 설명은 다음 링크를 확인하길 바란다. 2022.10.06 - [통계 프로그램 사용 방법/SAS] - [SAS] 변수 계산 (산술 연산) - DATA, SET

 

가장 기초적인 방법 (하지만 잘못된 코드다)

DATA hong.df_new;
SET hong.df;

*AST를 기준으로 셋으로 나누기;
IF AST>=40 THEN AST_S3=0;
	ELSE IF AST<40 AND AST>=20 THEN AST_S3=1;
	ELSE IF AST<20 THEN AST_S3=2;

RUN;

조건문 (IF, ELSE IF)와 AND 연산자에 대한 내용은 다음 링크를 확인하길 바란다. 2022.10.06 - [통계 프로그램 사용 방법/SAS] - [SAS] 변수 계산 (논리 연산) - DATA, SET, IF, ELSE IF, ELSE, AND, OR

 

IF AST>=40 THEN AST_S3=0; : AST가 40 이상이면 AST_S3의 값은 0을 부여한다.
     ELSE IF AST<40 AND AST>=20 THEN AST_S3=1; : AST가 40 미만이면서 20 이상이면 AST_S3의 값은 1을 부여한다.
     ELSE IF AST<20 THEN AST_S3=2; : AST가 20 미만이면 AST_S3의 값은 2를 부여한다.

 

 

문제점: 결측치

얼핏 보면 이상할 것이 없어 보이는 이 코드가 왜 잘못되었다고 하는 것일까?

문제는 결측치다.

 

다음 코드로 AST의 분포를 확인해보면 8개의 결측치가 있음을 알 수 있다. PROC MEANS에 관한 내용은 다음 링크에서 확인할 수 있다. 2022.09.23 - [기술 통계/SAS] - [SAS] 기술 통계 (평균, 표준편차, 표준오차, 최댓값, 최솟값, 중위수, 분위수 등) - PROC UNIVARIATE, PROC MEANS

 

결측치 확인 코드

PROC MEANS DATA=hong.df NMISS; 
VAR AST; 
RUN;

 

결과

 

결측치 확인 코드

그런데, AST_S3에는 결측치가 없음을 다음 코드에서 확인할 수 있다.

PROC MEANS DATA=hong.df_new NMISS; 
VAR AST_S3; 
RUN;

 

결과

 

결측치 향방 확인하는 코드

그렇다면 결측치는 모두 어디에 가있는 것일까? SAS에서는 결측치를 "."으로 표현한다. 결측치를 1로, 결측치가 아닌 경우를 0으로 코딩한 변수 AST_MISS를 만들고, AST_S3과의 분할표를 만들어 확인해보자. 분할표에 대한 내용은 다음 링크를 확인하길 바란다. 2022.08.18 - [기술 통계/SAS] - [SAS] 도수분포표 (Frequency table), 분할표 (Contingency table) 만들기 - PROC FREQ

DATA hong.df_new;
SET hong.df;

*AST를 기준으로 셋으로 나누기;
IF AST>=40 THEN AST_S3=0;
	ELSE IF AST<40 AND AST>=20 THEN AST_S3=1;
	ELSE IF AST<20 THEN AST_S3=2;

*AST 결측 여부 확인 변수 만들기;
IF AST=. THEN AST_MISS=1;
	ELSE AST_MISS=0;

RUN;

*분할표 만들기;
PROC FREQ DATA=hong.df_new; 
TABLE AST_S3 * AST_MISS / NOROW NOCOL NOPERCENT; 
RUN;

 

결과

결측값 8개에 AST_S3의 값으로 2가 부여되어 있다. 이는 명백히 "ELSE IF AST<20 THEN AST_S3=2;" 코드에서 기인한 문제다. 즉, SAS는 AST의 결측치에 대해 "AST<20"가 옳다고 (TRUE) 본 것이다. 이를 해결하기 위해서는 코드를 다음과 같이 작성해야 한다. (두 가지 방법 모두 옳다.)

 

코드

*방법 1: "AST>=0"을 추가하기;
DATA hong.df_new;
SET hong.df;

*AST를 기준으로 셋으로 나누기;
IF AST>=40 THEN AST_S3=0;
	ELSE IF AST<40 AND AST>=20 THEN AST_S3=1;
	ELSE IF AST<20 AND AST>=0 THEN AST_S3=2;

RUN;

*방법 2: "AST^=."을 추가하기;
DATA hong.df_new;
SET hong.df;

*AST를 기준으로 셋으로 나누기;
IF AST>=40 THEN AST_S3=0;
	ELSE IF AST<40 AND AST>=20 THEN AST_S3=1;
	ELSE IF AST<20 AND AST^=. THEN AST_S3=2;

RUN;

방법 1은 "AST>=0"을 추가하여 결측치는 해당 조건을 만족하지 않게 조정한 것이다.

방법 2는 "AST^=."을 추가하였다.  "^="는 같지 않다는 뜻이므로, AST가 결측이 아니라는 뜻을 의미한다. 

 

각 방법에는 세 가지 조건이 존재한다. 방법 2를 기준으로 한다면 

조건 1: AST>=40

조건 2: AST<40 AND AST>=20

조건 3: AST<20 AND AST^=.

인데, 결측치는 세 조건 모두 부합하지 않았다. 따라서 결측치는 THEN 뒤로 넘어가 본 적이 없다. THEN 뒤에서는 AST_S3의 값을 배정받으므로 결측치는 AST_S3값을 배정받아본 적이 없는 것이다. 따라서 AST가 결측인 경우에는 AST_S3 또한 결측치가 된다. 

 

>, <, >=, <=등은 실제 코딩을 하다 보면 매우 입력하기 귀찮아지는데, 다음과 같은 영문 부호로 이를 대체할 수도 있다.

연산 부호 영문 부호
= EQ 같다
~=
^=
NE 같지 않다
> GT 크다
< LT 작다
>= GE 크거나 같다
<= LE 작거나 같다
^>
~>
NG 크지 않다
^<
~<
NL 작지 않다

 

 

 

MAX, MIN

최댓값을 구하는 MAX, 최솟값을 구하는 MIN 함수다. 간 기능 지표 (ALT, AST) 중 큰 것을 고른 LIVER_MAX변수와, 작은 것을 고른 LIVER_MIN변수를 새로 만든다고 하자. 그럼 코드는 다음과 같다.

DATA hong.df_new;
SET hong.df;

*최댓값;
LIVER_MAX=MAX(AST, ALT);
*최솟값;
LIVER_MIN=MIN(AST, ALT);
RUN;

LIVER_MAX=MAX(AST, ALT); : AST와 ALT 중 더 큰 값을 LIVER_MAX에 저장하라.
LIVER_MIN=MIN(AST, ALT); : AST와 ALT 중 더 작은 값을 LIVER_MIN에 저장하라.

 

여기에서는 결측치를 어떻게 처리할까?

AST, ALT 둘 중 하나가 결측치인 경우 MIN, MAX모두 결측치가 아닌 값을 반환한다. 

만약, AST, ALT 둘 다 결측치인 경우 MIN, MAX은 결측치를 반환한다.

 

 

상황: 전체 인구를 1) 과거 흡연자, 2) 비흡연자 및 현재 흡연자로 나누고 싶을 때

 이전 포스팅에서 이런 경우 조건문(IF)을 이용하여 나눌 수 있다고 하였다. 2022.10.06 - [통계 프로그램 사용 방법/SAS] - [SAS] 변수 계산 (논리 연산) - DATA, SET, IF, ELSE IF, ELSE, AND, OR

위 글에서도 간단하게 설명했지만 IN이라는 연산자를 이용하면 매우 빠르게 할 수 있다.

 

IN은 다음과 같이 사용할 수 있다. 

 

1) IN (0 2) : 0 혹은 2에 해당하는 경우

2) IN (0:2) : 0 이상 2 이하 정수에 해당하는 경우

 

IN을 NOT IN으로 바꾸면 "해당하지 않는 경우"로 바뀐다.

*결측치가 없음을 확인하기;
PROC MEANS DATA=hong.df NMISS;
VAR SMOK;
RUN;

DATA hong.df_new;
SET hong.df;

*과거 흡연자 // 현재 흡연자 + 비흡연자로 나누기;
IF SMOK IN (0 2) THEN SMOK_S2=0;
	ELSE SMOK_S2=1;

RUN;

IF SMOK IN (0 2) THEN SMOK_S2=0; : SMOK가 0 혹은 2인 경우 SMOK_S2에는 0을 부여한다.
ELSE SMOK_S2=1; : 그 외에는 SMOK_S2에 1을 부여한다.

 

SAS 변수 계산 (비교 연산) 정복 완료!

작성일: 2022.10.06.

최종 수정일: 2022.10.06.

이용 프로그램: SAS v9.4

운영체제: Windows 10

반응형
반응형

[SAS] 변수 계산 (논리 연산) - DATA, SET, IF, ELSE IF, ELSE, AND, OR

 조건에 따라 변수를 바꾸고 싶을 때가 있다. 예를 들어, 인구를 1) 음주 & 흡연자, 2) 음주 & 과거 흡연자, 3) 그 외로 나누고 싶을 수 있다. 이런 경우에 사용하는 논리 연산에 대해 알아보고자 한다. 내용은 다음과 같다.

 

1) 조건문 (IF, ELSE IF)

2) AND

3) OR

 

*실습용 데이터는 아래 링크를 클릭하면 다운로드할 수 있습니다.

2022.08.04 - [공지사항 및 소개] - 분석용 데이터 (update 22.10.06)

 

분석용 데이터 (update 22.10.06)

2022년 08월 29일 버전입니다. 변수는 계속하여 추가될 예정입니다. 다음 카테고리에 있는 글에서 이용된 데이터입니다. - 기술 통계 - 통계 프로그램 사용 방법 1) 엑셀 파일 2) CSV 파일 3) 코드북

medistat.tistory.com

 

시작하기 위해 라이브러리를 만들고, 파일을 불러온다.

라이브러리 만드는 방법: 2022.08.05 - [통계 프로그램 사용 방법/SAS] - [SAS] 라이브러리 만들기 - LIBNAME

파일 불러오는 방법: 2022.08.05 - [통계 프로그램 사용 방법/SAS] - [SAS] 데이터 불러오기 및 저장하기 - PROC IMPORT, PROC EXPORT

 

*라이브러리 지정하기;
LIBNAME hong "C:/Users/User/Documents/Tistory_blog";

*파일 불러오기;
PROC IMPORT
DATAFILE="C:\Users\user\Documents\Tistory_blog\Data.xlsx"
DBMS=EXCEL
OUT=hong.df
REPLACE;
RUN;

 

몇 가지 예시를 통해 논리 연산에 대해 배워보고자 한다.

 

상황 : 전체 인구를 현재 흡연자와 그 외(과거 흡연자와 비흡연자)로 나누려고 할 때

 데이터의 흡연 변수는 다음과 같이 코딩되어 있음을 코드북에서 확인할 수 있다.

SMOK 0 1 2
내용 비흡연자 과거 흡연자 현재 흡연자

 

우리는 SMOK_S2라는 변수를 새로 만들어 다음과 같이 코딩되기를 바란다.

SMOK_S2 0 1
내용 과거 흡연자와 비흡연자 현재 흡연자

 

즉, SMOK를 SMOK_S2로 바꿀 때, 다음과 같이 바뀌어야 한다.

  SMOK SMOK_S2
비흡연자 0 0
과거 흡연자 1 0
현재 흡연자 2 1

 

SMOK의 0과 1은 SMOK_S2에서 0이어야 하고, SMOK의 2는 SMOK_S2에서 1이어야 한다. 이를 실행하는 방법은 여러 가지가 있는데, 코드를 하나씩 살펴보면 다음과 같다. 변수를 바꿀 때 쓰는 DATA-SET구문에 대한 설명은 다음 링크를 확인하길 바란다. 2022.10.06 - [통계 프로그램 사용 방법/SAS] - [SAS] 변수 계산 (산술 연산) - DATA, SET

 

1) 방법 1 (가장 기초적)

DATA hong.df_new;
SET hong.df;

*현재 흡연자 // 과거 흡연자 + 비흡연자로 나누기 (1);
IF SMOK=0 THEN SMOK_S2=0;
	ELSE IF SMOK=1 THEN SMOK_S2=0;
	ELSE IF SMOK=2 THEN SMOK_S2=1;

RUN;

IF구문은 다음과 같은 구조를 띤다.

IF {조건1} THEN {실행1}                  :"조건 1"을 만족하면 "실행1"을 실시한다.

    ELSE IF {조건2} THEN {실행2}    :"조건 1"을 만족하지 않는 데이터 중 "조건 2"를 만족하면 "실행 2"를 실시한다.

    ...

    ELSE {마지막 실행}                     :"조건1", "조건 2", ... 를 만족하지 않는 데이터는 "마지막 실행"을 실시한다.

 

이를 적용하면 다음과 같이 해석할 수 있다.

 

IF SMOK=0 THEN SMOK_S2=0; : SMOK가 0이면 SMOK_S2는 0이다.
     ELSE IF SMOK=1 THEN SMOK_S2=0; : SMOK가 0이 아닌 사람 중 SMOK가 1인 사람의 SMOK_S2는 0이다.
     ELSE IF SMOK=2 THEN SMOK_S2=1; : SMOK가 0, 1이 아닌 사람 중 SMOK가 1인 사람의 SMOK_S2는 0이다.

 

여기에는 ELSE구문이 없으므로, 모든 조건에 부합하지 못한 데이터가 만약 있다면 그 사람의 SMOK_S2는 결측치로 대체된다.

2) 방법 2 

*결측치가 없음을 확인하기;
PROC MEANS DATA=hong.df NMISS;
VAR SMOK;
RUN;

DATA hong.df_new;
SET hong.df;

*현재 흡연자 // 과거 흡연자 + 비흡연자로 나누기 (2);
IF SMOK=0 THEN SMOK_S2=0;
	ELSE IF SMOK=1 THEN SMOK_S2=0;
	ELSE SMOK_S2=1;

RUN;

이번에는 결측치가 없음을 확인하고 "ELSE IF"가 아닌 "ELSE"를 사용할 것이다. PROC MEANS를 이용하여 결측치가 없음을 우선 확인하자. 이에 관한 내용은 다음 링크에서 확인할 수 있다. 2022.09.23 - [기술 통계/SAS] - [SAS] 기술 통계 (평균, 표준편차, 표준오차, 최댓값, 최솟값, 중위수, 분위수 등) - PROC UNIVARIATE, PROC MEANS

 

결측치가 없음을 확인했다면, 다음의 사고 과정은 매우 논리적이다.

 

1) 1000명 전원은 {비흡연자, 과거 흡연자, 현재 흡연자} 셋 중의 하나에 반드시 속한다.

2) 비흡연자에게 SMOK_S2는 0의 값을 부여하고, 과거 흡연자에게 SMOK_S2는 1의 값을 부여한다.

3) 아직 SMOK_S2값을 부여받지 못한 사람은 모두 현재 흡연자이므로 SMOK_S2는 1의 값을 부여한다.

 위의 3) 내용을 코드로 옮기면 "ELSE SMOK_S2=1"가 된다. 

 

만약 결측치가 있다면 흡연 정보를 모르는 사람 또한 SMOK_S2의 값은 1이 부여되어 현재 흡연자로 평가받기 때문에 결측치가 있을 때에는 이 코드를 사용하면 안 된다.

 

3) 방법 3

*결측치가 없음을 확인하기;
PROC MEANS DATA=hong.df NMISS;
VAR SMOK;
RUN;

DATA hong.df_new;
SET hong.df;

*현재 흡연자 // 과거 흡연자 + 비흡연자로 나누기 (3);
IF SMOK=0 OR SMOK=1 THEN SMOK_S2=0;
	ELSE SMOK_S2=1;

RUN;

OR 연산자를 사용하면 코드가 조금 더 간단해진다.

OR 연산자는 OR 앞뒤로 있는 조건 중 어떤 것이라도 만족하면 옳다고(TRUE)로 인식한다. 우리는 과거 흡연자, 비흡연자 모두 SMOK_S2에서는 0이라는 값을 부여할 것이므로 SMOK변수는 0이든 1이든 둘 중 하나이기만 하면 된다. 

IF SMOK=0 OR SMOK=1 THEN SMOK_S2=0;

그래서 SMOK=0, SMOK=1 중 하나라도 만족하면 SMOK_S2에는 0이라는 값을 부여한다는 위 코드를 사용하였다. 

 

4) 방법 4

다음 링크에서 비교 연산자에 대해 공부하고 온다면 다음과 같이 쓸 수 있음도 알 수 있다. 2022.10.06 - [통계 프로그램 사용 방법/SAS] - [SAS] 변수 계산 (비교 연산) - DATA, SET, GE, LE, NE, IN, MIN, MAX

*결측치가 없음을 확인하기;
PROC MEANS DATA=hong.df NMISS;
VAR SMOK;
RUN;

DATA hong.df_new;
SET hong.df;

*현재 흡연자 // 과거 흡연자 + 비흡연자로 나누기 (4);
IF SMOK<=1 THEN SMOK_S2=0;
	ELSE SMOK_S2=1;

RUN;

과거 흡연자와 비흡연자의 SMOK값은 각각 0,1이므로 "SMOK<=1"이라고 쓸 수도 있다.

만약 SMOK에 결측치가 있다면 비교 연산자중 일부는 결측치를 0으로 인식하므로, "SMOK<=1"을 만족한 것으로 본다. 따라서 결측치가 없음을 미리 확인해야 하며, 이에 관한 내용은 다음 링크에서 확인할 수 있다. 2022.10.06 - [통계 프로그램 사용 방법/SAS] - [SAS] 변수 계산 (비교 연산) - DATA, SET, GE, LE, NE, IN, MIN, MAX

 

5) 방법 5, 6

비교 연산자 중 IN을 사용하여 다음과 같이 작성할 수도 있다.

*결측치가 없음을 확인하기;
PROC MEANS DATA=hong.df NMISS;
VAR SMOK;
RUN;

DATA hong.df_new;
SET hong.df;

*현재 흡연자 // 과거 흡연자 + 비흡연자로 나누기 (5);
IF SMOK IN (0 1) THEN SMOK_S2=0;
	ELSE SMOK_S2=1;

RUN;

DATA hong.df_new;
SET hong.df;

*현재 흡연자 // 과거 흡연자 + 비흡연자로 나누기 (6);
IF SMOK IN (0:1) THEN SMOK_S2=0;
	ELSE SMOK_S2=1;

RUN;

방법 5의 IF SMOK IN (0 1) THEN SMOK_S2=0;

- SMOK가 0, 1인 데이터에게만 SMOK_S2의 값으로 0을 부여한다는 뜻이다.

방법 6의 IF SMOK IN (0:1) THEN SMOK_S2=0;

- SMOK가 0 이상 1 이하의 정수인 데이터에게만 SMOK_S2의 값으로 0을 부여한다는 뜻이다.

 

6) 방법 7

방법 6은 사실 "SMOK가 0 이상이면서 1 이하인 정수 데이터"에게 SMOK_S2의 값으로 0을 부여한 것이다. 이는 AND연산자를 사용한 것과 다름없다. AND 연산자는 AND 앞뒤로 있는 조건을 모두 만족해야 TRUE를 반환하는데, 이 경우 SMOK>=0 AND SMOK<=1 이라는 문구를 사용하면 되는 것이다.

*결측치가 없음을 확인하기;
PROC MEANS DATA=hong.df NMISS;
VAR SMOK;
RUN;

DATA hong.df_new;
SET hong.df;

*현재 흡연자 // 과거 흡연자 + 비흡연자로 나누기 (7);
IF SMOK>=0 AND SMOK<=1 THEN SMOK_S2=0;
	ELSE SMOK_S2=1;

RUN;

 

AND 연산자는 OR 연산자보다 우선하므로, 괄호를 적절히 치며 사용해야 한다. (사칙연산에서 곱셈이 덧셈보다 우선하는 것과 동일하다)

 

SAS 변수 계산 (논리 연산) 정복 완료!

작성일: 2022.10.06.

최종 수정일: 2022.11.03.

이용 프로그램: SAS v9.4

운영체제: Windows 10

 

반응형
반응형

[SAS] 변수 계산 (산술 연산) - DATA, SET

 주어진 데이터의 값을 바꾸어 사용해야 할 때가 있다. 이번 포스팅에서는 다음의 연산들을 소개할 것이다.

 

산술 연산

1) 더하기

2) 빼기

3) 곱하기

4) 나누기

5) 제곱 (승)

6) 로그 (log)

7) 지수

 

*실습용 데이터는 아래 링크를 클릭하면 다운로드할 수 있습니다.

2022.08.04 - [공지사항 및 소개] - 분석용 데이터 (update 22.10.06)

 

분석용 데이터 (update 22.10.06)

2022년 08월 29일 버전입니다. 변수는 계속하여 추가될 예정입니다. 다음 카테고리에 있는 글에서 이용된 데이터입니다. - 기술 통계 - 통계 프로그램 사용 방법 1) 엑셀 파일 2) CSV 파일 3) 코드북

medistat.tistory.com

 

시작하기 위해 라이브러리를 만들고, 파일을 불러온다.

라이브러리 만드는 방법: 2022.08.05 - [통계 프로그램 사용 방법/SAS] - [SAS] 라이브러리 만들기 - LIBNAME

파일 불러오는 방법: 2022.08.05 - [통계 프로그램 사용 방법/SAS] - [SAS] 데이터 불러오기 및 저장하기 - PROC IMPORT, PROC EXPORT

 

*라이브러리 지정하기;
LIBNAME hong "C:/Users/User/Documents/Tistory_blog";

*파일 불러오기;
PROC IMPORT
DATAFILE="C:\Users\user\Documents\Tistory_blog\Data.xlsx"
DBMS=EXCEL
OUT=hong.df
REPLACE;
RUN;

 

코드

DATA hong.df_new;
SET hong.df;

*1) 더하기;
LIVER_SUM=AST+ALT;

*2) 빼기;
ALT_DIF=ALT-ALT_POSTMED;

*3) 곱하기;
MALE_ALC=SEX*ALCOHOL;

*4) 나누기;
LIVER_RATIO=AST/ALT;

*5) 거듭제곱 (승);
SBP_SQ=SBP**2;

*6) 로그 (log);
LOG_ALT=LOG(ALT);
LOG10_ALT=LOG10(ALT);
LOG7_ALT=LOG(ALT)/LOG(7);

*7) 지수;
EXP_ALT=EXP(ALT);
EXP10_ALT=EXP(ALT*log(10));

RUN;

DATA hong.df_new; : hong이라는 라이브러리에 df_new라는 이름을 가진 데이터 파일을 새로 만들 것이다. 
SET hong.df; : df_new라는 이름의 데이터파일에는 hong라이브러리에 있는 df파일을 갖다 넣어라.

*1) 더하기;
LIVER_SUM=AST+ALT; : AST와 ALT를 합쳐 그 값을 LIVER_SUM이라는 변수에 저장해라.

*2) 빼기;
ALT_DIF=ALT-ALT_POSTMED; : ALT에서 ALT_POSTMED를 빼서 그 값을 ALT_DIF라는 변수에 저장해라.

*3) 곱하기;
MALE_ALC=SEX*ALCOHOL; : SEX와 ALCOHOL을 곱해 MALE_ALC라는 변수에 저장해라.

*4) 나누기;
LIVER_RATIO=AST/ALT; : AST를 ALT로 나누어 그 값을 LIVER_RAIO라는 변수에 저장해라

*5) 거듭제곱 (승);
SBP_SQ=SBP**2; : SPB를 제곱하여 SBP_SQ에 저장해라. 만약 세제곱을 원한다면 "SBP**3"을 사용하면 된다.

*6) 로그 (log);
LOG_ALT=LOG(ALT); : ALT에 로그를 씌워 LOG_ALT에 저장해라. 이때 로그의 밑은 $e$다.
LOG10_ALT=LOG10(ALT); : ALT에 로그를 씌워 LOG_ALT에 저장해라. 이때 로그의 밑은 $10$이다.

LOG7_ALT=LOG(ALT)/LOG(7); : ALT에 로그를 씌워 LOG_ALT에 저장해라. 이때 로그의 밑은 $7$이다. 원하는 숫자를 밑으로 하고 싶으면 7이 아닌 원하는 숫자를 적으면 된다.

*7) 지수;
EXP_ALT=EXP(ALT); : $e$의 ALT승$\left(e^{ALT} \right)$을 EXP_ALT에 저장해라.
EXP10_ALT=EXP(ALT*log(10)); : $10$의 ALT승$\left(10^{ALT} \right)$을 EXP10_ALT에 저장해라. 만약 $10$이 아닌 $5$의 ALT승$\left(5^{ALT} \right)$를원하면 "log(5)"를 사용하면 된다.

 

 

결과

 SAS내 "탐색기"로 데이터를 보면 다음과 같이 새로운 변수들이 만들어진 것을 확인할 수 있다.

 

 

연산 시 결측치는 어떻게 처리되는가?

 연산 시 가장 중요한 것은 결측치가 어떻게 처리되는 것인가에 대한 내용이다. 왜냐하면 연산자에 따라 결측치를 결측치로 생각하는 경우가 있고, 0으로 생각하는 경우가 있기 때문이다. 추상적이라 이해가 어려울 테니 다음 예시를 보면 이해가 빠를 것이다.

 

변수 AST에는 8개의 결측치가 있음을 다음 코드로 확인할 수 있다. (PROC MEANS에 대한 내용은 다음 링크에서 확인할 수 있다. 2022.09.23 - [기술 통계/SAS] - [SAS] 기술 통계 (평균, 표준편차, 표준오차, 최댓값, 최솟값, 중위수, 분위수 등) - PROC UNIVARIATE, PROC MEANS)

 

결측치 확인 코드

PROC MEANS DATA=hong.df NMISS;
VAR AST;
RUN;

 

결측치  확인 결과

 

그러면 위에서 만든 변수 중 LIVER_SUM(=AST+ALT)은 어떻게 될까? 결측치의 개수를 확인해보자.

 

결측치 확인 코드

PROC MEANS DATA=hong.df_new nmiss;
VAR LIVER_SUM;
RUN;

결측치  확인 결과

 

결측치는 연산 결과도 결측치가 됨을 알 수 있다.

 

하지만 다음 링크에서 확인할 수 있듯이, 비교연산자 중 일부는 결측치를 0으로 인식하므로 코드를 주의해서 작성해야 한다.

2022.10.06 - [통계 프로그램 사용 방법/SAS] - [SAS] 변수 계산 (비교 연산) - DATA, SET, GE, LE, NE, IN, MIN, MAX

 

 

코드 정리

*라이브러리 지정하기;
LIBNAME hong "C:/Users/User/Documents/Tistory_blog";

*파일 불러오기;
PROC IMPORT
DATAFILE="C:\Users\user\Documents\Tistory_blog\Data.xlsx"
DBMS=EXCEL
OUT=hong.df
REPLACE;
RUN;

DATA hong.df_new;
SET hong.df;

*1) 더하기;
LIVER_SUM=AST+ALT;

*2) 빼기;
ALT_DIF=ALT-ALT_POSTMED;

*3) 곱하기;
MALE_ALC=SEX*ALCOHOL;

*4) 나누기;
LIVER_RATIO=AST/ALT;

*5) 거듭제곱 (승);
SBP_SQ=SBP**2;

*6) 로그 (log);
LOG_ALT=LOG(ALT);
LOG10_ALT=LOG10(ALT);
LOG7_ALT=LOG(ALT)/LOG(7);

*7) 지수;
EXP_ALT=EXP(ALT);
EXP10_ALT=EXP(ALT*log(10));

RUN;

 

SAS 변수 계산 (산술 연산) 정복 완료!

작성일: 2022.10.06.

최종 수정일: 2022.11.03.

이용 프로그램: SAS v9.4

운영체제: Windows 10

반응형
반응형

[SAS] SAS 데이터 (.sas7bdat) 불러오기

 

 SAS와 같은 프로그램을 다루다 보면 참 어이없는 곳에서 막히곤 하는데, SAS에서 SAS 파일(.sas7bdat)을 불러오는 것이 대표적인 사례다. 엑셀 파일도, CSV 파일도 불러올 줄 알지만 막상 sas 데이터 파일을 주면 어떻게 쓸지 모르는 상황이 발생할 수 있다. 

 

 하지만 매우 간단하다.

 정답부터 이야기하면 다음과 같다.

1) 라이브러리로 쓸 폴더에 .sas7bdat 파일을 넣는다.

2) 라이브러리를 선언한다.

3) 사용한다.

 

예를 들어, 

1) "C:\Users\user\Documents\Tistory_blog"에 "df.sas7bdat"라는 파일이 있는 상황을 가정하자.

(파일은 다음 링크를 클릭하여 다운받도록 한다.

2022.08.04 - [공지사항 및 소개] - 분석용 데이터 (update 22.08.10))

2) 그렇다면 먼저 "C:\Users\user\Documents\Tistory_blog"을 라이브러리로 지정한다.

(라이브러리 지정 방법은 다음 링크를 클릭하여 확인하도록 한다.

2022.08.05 - [통계 프로그램 사용 방법/SAS] - [SAS] 라이브러리 만들기 - LIBNAME)

LIBNAME hong "C:/Users/User/Documents/Tistory_blog";

3) "Data="구문에 "hong.df"를 넣어 사용하면 된다. 예를 들어 평균을 구한다면 다음 코드를 사용한다.

PROC MEANS DATA=hong.df; 
VAR ALT;
RUN;

 

 

왜 이런 것일까?

 

 파일을 불러오던 상황을 다시 한번 생각해보자.

2022.08.05 - [통계 프로그램 사용 방법/SAS] - [SAS] 데이터 불러오기 및 저장하기 - PROC IMPORT, PROC EXPORT

 엑셀 파일을 불러와 특정 라이브러리에 저장하면 .sas7bdat 파일이 생성된 것을 알 수 있었다. 즉, 어떤 .sas7bdat파일을 특정 폴더에 넣는 것은 엑셀 파일을 불러와 특정 라이브러리에 저장한 것과 같은 의미다. 따라서 폴더에 넣고 사용하기만 하면 되는 것이다.

 SAS에서 라이브러리는 영구폴더를 지정한 것과 같다는 것을 다시 한번 명심하자.

 

 

SAS 데이터 (.sas7bdat) 불러오기 정복 완료!

 

작성일: 2022.08.10.

최종 수정일: 2022.08.10.

이용 프로그램: SAS v9.4

운영체제: Windows 10

 

 

반응형
반응형

[SAS] 데이터 불러오기 및 저장하기 (내보내기) - PROC IMPORT, PROC EXPORT

불러오기

1. '불러오기 마법사 (Import Wizard)'를 이용하는 방법

2. 코드 (PROC IMPORT)를 사용하는 방법 (추천)

 

저장하기 (내보내기)

1. '내보내기 마법사 (Export Wizard)'를 이용하는 방법

2. 코드 (PROC EXPORT)를 사용하는 방법 (추천)

 

 

불러오기

SAS에서 불러올 수 있는 파일의 종류는 굉장히 많지만 불러오는 방법은 대체적으로 대동소이하다.

두 가지 방법으로 데이터를 불러오는 방법에 대해 설명하고자 한다.

 

1. '불러오기 마법사 (Import Wizard)'를 이용하는 방법

SAS를 이용할 때 데이터를 불러오는 방법과 저장하는 방법을 알아보겠다.

 

*실습용 데이터는 아래 링크를 클릭하면 다운로드할 수 있습니다

2022.08.04 - [공지사항 및 소개] - 분석용 데이터 (update 22.08.04) - 기술 통계

 

분석용 데이터 (update 22.08.04) - 기술 통계

2022년 08월 04일 버전입니다. 변수는 계속하여 추가될 예정입니다. 다음 카테고리에 있는 글에서 이용된 데이터입니다. - 기술 통계

medistat.tistory.com

 

 

 

1) 파일 > 데이터 가져오기 (I) 클릭하기

 

2) 파일 종류 선택하기

엑셀 파일을 불러올 거면 설정을 바꾸지 않는다.

CSV 파일을 가져오는 경우 드롭박스를 선택하여 CSV를 선택한다.

"Next>"를 눌러 다음 단계로 넘어간다.

 

3) 파일 선택하기

"Browse.."버튼을 누르면 다음과 같은 창이 뜬다

그런데 파일 위치에 찾아가도 보통 파일이 보이지 않는다. 왜냐하면 SAS는 엑셀 확장자 중 "xls 파일"을 기본값으로 설정하고 있는데, 요새 엑셀은 웬만하면 "xlsx 파일"을 사용하기 때문이다. 따라서 파일 형식 드롭박스를 눌러 "xlsx 파일"을 선택하면 파일이 보인다.

파일 선택 후 "열기 (O)"버튼을 누른다.

"OK"버튼을 누른다.

 

4) 시트 (Sheet) 선택하기

해당 엑셀 파일에 여러 개의 sheet가 있는 경우 원하는 sheet를 고른다.

 

"Options.."버튼은 평소에 거의 쓸 일이 없다. "Options.."버튼을 누르면 다음과 같은 창이 뜨는데

파일의 첫 행이 데이터명 (Age, ALT 등...)인 경우 첫 번째 체크박스는 반드시 선택되어 있어야 한다. 데이터명이 없는 데이터 파일인 경우 체크박스를 해제한다. 나머지는 변수의 포맷에 관한 것인데, 포맷 변경은 일일이 하는 것이 훨씬 편하므로 이 옵션 창에서는 아무것도 건들지 않는다.

 

"OK"버튼을 누르고 "Next>"버튼을 누른다.

 

4) 라이브러리 및 데이터명을 지정한다.

SAS에는 라이브러리라는 개념이 있다. 이에 관한 설명은 아래 링크에서 확인할 수 있다.

 

-라이브러리를 지정하지 않을 경우 기본값인 "WORK"에서 바꾸지 않으면 되고, 원하는 라이브러리에 데이터를 위치시키고 싶을 경우 원하는 라이브러리를 선택한다.

-원하는 데이터명을 "Member:"에 입력한다. 필자는 "Patient"라고 입력하였다.

 

"Next>"버튼을 눌러 다음으로 넘어간다.

이 창은 지금까지의 과정을 저장하겠냐고 묻는 것인데, 불러오기 마법사 (Import wizard)는 앞으로 쓰지 않을 것이므로 개의치 않는다. 그저 "Finish"버튼을 눌러 마무리한다.

 

 

2. 코드 (PROC IMPORT)를 사용하는 방법

위 방법은 몇 번의 클릭으로 마무리할 수 있으므로 직관적이고 간편해보이나, 생각보다 시간이 많이 들고 불편하며, 무엇보다 오류가 잘 생긴다. 단례로, 변수 이름이 잘못 불러와지는 경우가 매우 많다. 따라서 위 방법은 추천하지 않으며 코드를 쓰는 방법을 추천한다.

 

코드 사용하기에 앞서 먼저 라이브러리를 지정한다.

(라이브러리 지정 방법은 다음 링크에서 확인할 수 있다. 2022.08.05 - [통계 프로그램 사용 방법/SAS] - [SAS] 라이브러리 만들기 - LIBNAME)

 

LIBNAME hong "C:/Users/User/Documents/Tistory_blog";

 

기본적인 PROC IMPORT 코드는 다음과 같다.

PROC IMPORT
DATAFILE="C:\Users\user\Documents\Tistory_blog\Data.xlsx"
DBMS=EXCEL
OUT=hong.df
REPLACE;
RUN;

 

PROC IMPORT: 파일을 불러오는 코드를 작성하겠다.

DATAFILE="C:\Users\user\Documents\Tistory_blog\Data.xlsx" : 문서의 "Tistory_blog" 폴더에 있는 "Data.xlsx"파일을 가져오라.

DBMS=EXCEL : 데이터 종류 (DBMS, DataBase Management System)는 엑셀 파일이다.

 - CSV파일은 "EXCEL"대신에 "CSV"를 쓰면 되고, tab으로 구분되어있는 파일은 "TAB"을 쓰면 된다.

OUT=hong.df : "hong" 이라는 라이브러리에 저장하되 데이터 파일 이름은 "df"로 한다.

REPLACE: 혹시 "hong"이라는 라이브러리에 이미 이름이 "df"인 데이터 파일이 있으면 덮어쓴다. (REPLACE 옵션을 쓰지 않으면 SAS는 기본적으로 덮어쓰지 않는다.)

 

 - 라이브러리의 개념이 어색한 독자는 다음 글을 참고하기 바란다.

2022.08.05 - [통계 프로그램 사용 팁] - [SAS] 라이브러리 만들기

 

[SAS] 라이브러리 만들기

[SAS] 라이브러리 만들기 SAS를 접하자마자 마주치는 단어가 '라이브러리 (Library)'인데 생소하고 어색한 개념이라 쉽게 이해하기 어려울 것이 사실이다. 필자도 이를 받아들이기까지 짧지 않은 시

medistat.tistory.com

 

 라이브러리에 데이터 파일을 불러오면 다음부터는 PROC IMPORT를 통해 엑셀 파일을 다시 불러올 필요가 없다. 라이브러리 지정만 해주면 "hong.df"라는 데이터 파일은 언제든지 쓸 수 있다. 평소에는 큰 이득이 되는지 모르겠지만, 데이터 파일이 너무 크거나, 데이터 변환을 하는 경우에는 큰 이득이 된다.

 

 라이브러리를 지정한 문서 내 "Tistory_blog"폴더에 가면 "df.sas7bdat"라는 파일이 생긴 것을 확인할 수 있다.

 

혹은 SAS 내 탐색기에서 "라이브러리 - Hong"으로 들어가면 Df파일이 존재함을 확인할 수도 있다.

 

몇개의 옵션을 더 넣을 수도 있다.

PROC IMPORT
DATAFILE="C:\Users\user\Documents\Tistory_blog\Data.xlsx"
DBMS=EXCEL
OUT=hong.df
REPLACE;
SHEET="Sheet1$";
RANGE="Sheet1$A1:B10";
GETNAMES=YES;
RUN;

SHEET="Sheet1$":엑셀 파일에 여러 개의 시트가 있을 경우 "Sheet1"을 불러오도록 지정한다.

 - CSV 파일은 SHEET구분이 없으므로 지정할 필요가 없다.

RANGE="Sheet1$A1:B10":시트 중 불러올 영역을 "Sheet1의 A1 - B10"으로 지정한다. 만약 SHEET구문과 상충되면 (예, SHEET="Sheet2$"; RANGE="Sheet1$A1:B10") SHEET구문은 무시되고 RANGE에 따라 데이터를 불러온다.
GETNAMES=YES: 첫 번째 행을 변수명으로 불러오라는 옵션이다. 

 

처음엔 코드란 것이 많이 어색하고 불편하겠지만, 익숙해지면 불러오기 마법사 (Import wizard)는 사용하지 않게 될 것이다.

 

 

 

저장하기 (내보내기)

이번엔 데이터를 내보내는 방법을 알아보도록 하겠다.

 

 

1. '내보내기 마법사 (Export Wizard)'를 이용하는 방법

앞서 불러오기 마법사를 이용해 임시 라이브러리 (WORK)에 저장해놓은 "PATIENT"라는 데이터 파일을 내보내기로 한다.

 

1) 파일 > 데이터 내보내기 (R) 클릭하기

 

2) 라이브러리와 내보낼 데이터 파일 선택하기

라이브러리는 WORK, 데이터 파일 (Member)은 PATIENT를 선택하고 "Next >" 버튼을 누른다.

 

3) 저장될 파일의 포맷 선택하기

엑셀 파일, CSV파일, SPSS파일 등 여러 포맷으로 반출이 가능하다. 이번에는 엑셀 파일로 내보내기를 한다. "Next >" 버튼을 누른다.

 

4) 저장될 위치와 파일의 이름 지정하기

"Browse..." 버튼을 누른다.

 

저장하고자 하는 곳의 위치를 찾아 들어가고, 파일 이름일 작성하고, 원하는 파일 형식을 작성한다. 호환성을 위해 ".xlsx" 형식을 추천한다.

 

 

"OK"버튼을 누른다.

 

5) 완료

 

여기에서 바로 "Finish"버튼을 누르면 내보내기 과정은 끝이 난다.

 

하지만, 내보내진 엑셀 파일의 시트 이름을 지정하고 싶을 때가 있는데, 이때는 다음 그림과 같이

시트 이름을 지정하고 "Next >"버튼을 누르면 된다.

 

 

 

불러오기 마법사에서 처럼 지금까지의 과정을 PROC EXPORT로 저장하는 것인데, 앞으로 쓰지 않을 방법이므로 무시한다.

 

 

 

2. 코드 (PROC EXPORT)를 사용하는 방법

PROC IMPORT에서와 같이 마법사 보다는 코드를 추천한다.

 

기본적인 PROC EXPORT 코드는 다음과 같다.

PROC EXPORT
DATA=hong.df
OUTFILE="C:\Users\user\Documents\Tistory_blog\Output.xlsx"
DBMS=EXCEL
REPLACE;
RUN;

 

PROC EXPORT: 파일을 내보내는 코드를 작성하겠다.

DATA=hong.df: 추출할 파일은 "hong" 이라는 라이브러리에 있는 데이터 파일 "df"이다.

OUTFILE="C:\Users\user\Documents\Tistory_blog\Output.xlsx" : 문서의 "Tistory_blog" 폴더에 있는 "Export.xlsx"파일로 저장한다.

DBMS=EXCEL : 데이터 종류 (DBMS, DataBase Management System)는 엑셀 파일이다.

 - CSV파일은 "EXCEL"대신에 "CSV"를 쓰면 되고, tab으로 구분되어있는 파일은 "TAB"을 쓰면 된다.

REPLACE: 혹시 "C:\Users\user\Documents\Tistory_blog\"에 이미 이름이 "Export.xlsx"인 파일이 있으면 덮어쓴다. 

 

 

만약 CSV파일로 내보내고 싶다면 파일명과 DBMS를 다음과 같이 CSV로 바꾸어주면 된다.

PROC EXPORT
DATA=hong.df
OUTFILE="C:\Users\user\Documents\Tistory_blog\Output.csv"
DBMS=CSV
REPLACE;
RUN;

 

SAS 데이터 불러오기 및 저장하기 정복 완료!

 

작성일: 2022.08.05.

최종 수정일: 2022.08.08.

이용 프로그램: SAS v9.4

운영체제: Windows 10

반응형
반응형

[SAS] 주석 처리 및 프로그램 특징

 

SAS를 구동하다 보면 특정 구역을 실행되지 않았으면 할 때가 있다. 예를 들어, 코드를 설명해놓은 구역은 실행되지 않아야 한다. 이럴 때는 주석 처리를 하면 된다. 방법은 두 가지를 알아보겠다.

 

행 별로 주석 처리 하기

행의 첫 시작을 "*"으로, 마지막을 ";"으로 지정하면 된다.

*라이브러리 지정하기;
LIBNAME hong "C:/Users/User/Documents/Tistory_blog";

이와 같은 코드 하에서는 첫 번째 행은 실행되지 않고, 두 번째 행만 실행된다.

 

여러 줄을 주석 처리하기

주석 시작 시점에 "/*"을, 마지막 시점에 "*/"으로 지정하면 된다.

/*라이브러리 지정하기
라이브러리 이름은 hong
위치는 C드라이브의 문서의 Tistory_blog */
LIBNAME hong "C:/Users/User/Documents/Tistory_blog";

 

 

SAS 프로그램의 특징 두 가지

특징 두 가지를 더 언급하고 본 포스팅을 마무리하고자 한다.

1) SAS는 대소문자를 가리지 않는다.

2) 문장이 마무리되었음은 세미콜론 (;)으로 알린다.

3) 코드를 실행하는 단축키는 F3이다.

 

SAS 주석 처리 정복 완료!

작성일: 2022.08.05.

최종 수정일: 2022.08.05.

이용 프로그램: SAS v9.4

운영체제: Windows 10

반응형
반응형

[SAS] 라이브러리 만들기 - LIBNAME

SAS를 접하자마자 마주치는 단어가 '라이브러리 (Library)'인데 생소하고 어색한 개념이라 쉽게 이해하기 어려울 것이 사실이다. 필자도 이를 받아들이기까지 짧지 않은 시간이 걸렸으니 말이다.

 

SAS 라이브러리 개념을 설명하고자 한다. 이해보다 코드가 필요한 독자들은 아래 코드 박스로 이동하면 된다.

-----------------------------SAS 라이브러리 개념 설명-----------------------------

SAS에서 사용되는 파일은 라이브러리에 저장되는데, SAS 라이브러리는 두 가지로 나뉜다.

1) WORK 라이브러리

 - 기본 라이브러리

 - 임시 폴더

2) 개인이 지정한 라이브러리

 - 개별화된 라이브러리

 - 영구 폴더

 

라이브러리라는 개념은 다음 비유를 통하면 쉽게 이해할 수 있을 거라 생각한다. 

 이 페이지에 들어온 독자들의 기기는 사진을 다운받아 여러분에게 보여준다. 하지만 이내 필요한 파일이 아니므로 곧 삭제한다. 이때 파일이 저장되어있는 곳이 "WORK 라이브러리"다. 파일이 곧 사라지듯, SAS를 종료하면 "WORK 라이브러리"에 저장되어 있는 SAS 파일은 사라진다.

 여러분의 기기에 사진을 영구적으로 저장하고자 한다면 특정 폴더에 저장을 해야 한다. 그 특정 폴더가 "개인이 지정한 라이브러리"이며 이곳에 저장된 파일은 영구적으로 저장되어 있다.

---------------------------------------------------------------------------------

 

 

라이브러리 지정 코드는 다음과 같다.

LIBNAME hong "C:/Users/User/Documents/Tistory_blog";

LIBNAME : 지정 코드. 변경하지 않는다.

hong: 원하는 라이브러리의 이름. 독자가 원하는 이름 (test, exam, patient ... 등) 원하는 이름으로 지정한다.

"C:/Users/User/Documents/Tistory_blog" : 라이브러리로 지정할 폴더의 위치를 지정한다. 앞으로의 SAS파일은 이 폴더에 저장될 것이다.

 

아래 글에서 찾아볼 수 있듯이, SAS는 대소문자를 가리지 않으므로  "LIBNAME", "hong"은 대문자로 쓰든, 소문자로 쓰든, 섞어 쓰든 아무 상관이 없으며 모두 같은 것으로 인식한다.

2022.08.05 - [통계 프로그램 사용 팁] - [SAS] 주석 처리 및 프로그램 특징

 

[SAS] 주석 처리 및 프로그램 특징

[SAS] 주석 처리 및 프로그램 특징 SAS를 구동하다 보면 특정 구역을 실행되지 않았으면 할 때가 있다. 예를 들어, 코드를 설명해놓은 구역은 실행되지 않아야 한다. 이럴 때는 주석 처리를 하면 된

medistat.tistory.com

 

 

SAS 파일을 특정 라이브러리에 저장하는 방법 및 SAS에서 라이브러리 지정이 필요한 이유는 다음 글에서 찾아볼 수 있다.

2022.08.05 - [통계 프로그램 사용 팁] - [SAS] 데이터 불러오기 및 저장하기

 

[SAS] 데이터 불러오기 및 저장하기

[SAS] 데이터 불러오기 및 저장하기 (내보내기) 불러오기 1. '불러오기 마법사 (Import Wizard)'를 이용하는 방법 2. 코드 (PROC IMPORT)를 사용하는 방법 (추천) 저장하기 (내보내기) 1. '내보내기 마법사 (Exp

medistat.tistory.com

 

 

 

SAS 라이브러리 정복 완료!

 

작성일: 2022.08.05.

최종 수정일: 2022.08.05.

이용 프로그램: SAS v9.4

운영체제: Windows 10

반응형

+ Recent posts