SAS에서 데이터 세트를 사용하려면 데이터 세트의 이름과 위치를 알려주면 데이터 세트의 내용을 파악할 수 있습니다. 데이터 세트가 자체적으로 문서화되기 때문에 SAS는 데이터와 함께 데이터 세트에 대한 정보를 자동으로 저장합니다.
데이터 세트에 대한 정보를 얻는 방법이 여러가지 있지만, PROC CONTENTS procedure을 실행하는 것이 가장 간단한 방법입니다.
대부분의 경우 키워드 PROC CONTES를 입력하고 DATA= 옵션을 사용하여 원하는 데이터 세트를 지정합니다. DATA= 옵션을 생략하면 기본적으로 가장 최근에 생성된 데이터 세트를 사용합니다.
# PROC CONTENTS Syntax
PROC CONTENTS DATA = data-set;
아래의 예시의 DATA 단계는 데이터 세트를 생성하여 PROC CONTES를 실행할 수 있도록 합니다.
# PROC CONTENTS Example
DATA funnies;
INPUT Id Name $ Height Weight DoB MMDDYY8.;
LABEL Id = ’Identification no.’
Height = ’Height in inches’
Weight = ’Weight in pounds’
DoB = ’Date of birth’;
INFORMAT DoB MMDDYY8.;
FORMAT DoB WORDDATE18.;
DATALINES;
53 Susie 42 41 07-11-81
54 Charlie 46 55 10-26-54
55 Calvin 40 35 01-10-81
56 Lucy 46 52 01-13-55
;
/* Use PROC CONTENTS to describe data set funnies; */
PROC CONTENTS DATA = funnies;
RUN;
# PROC CONTENTS 결과
PROC CONTENTS 예시에는 LABEL statement가 포함되어 있습니다.
SAS에서는 LABEL statement 를 사용하여 각 변수에 대해 최대 256자 길이의 레이블을 지정할 수 있습니다. 이러한 선택적 레이블을 사용하면 변수 이름보다 변수를 더 자세히 문서화할 수 있습니다.
DATA 단계에서 LABEL 문을 지정하면 설명이 데이터 세트에 저장되고 PROC CONTENS에 의해 인쇄됩니다.
또한 PROC 단계에서 LABEL 문을 사용하여 리포트를 사용자 정의할 수 있지만 레이블은 PROC 단계 동안에만 적용되고 데이터 세트에 저장되지 않습니다.
위의 PROC CONTENTS의 예시를 보면 INFORMAT 및 FORMAT 문도 있습니다.
INFORMAT과 FORMAT statement 를 사용하면 정보 또는 형식을 변수와 연결할 수 있습니다.
DATA 단계에서 INFORMAT 또는 FORMAT 문을 지정하면 해당 정보자 형식의 이름이 데이터 세트에 저장되고 PRC CONTENS에 의해 인쇄됩니다.
LABEL 문과 같은 FORMAT 문은 PROC 단계에서 리포트를 사용자 정의하는 데 사용할 수 있지만 포맷 이름은 데이터 세트에 저장되지 않습니다.
■ Creating and Redefining Variables
SAS에는 할당문을 사용하여 변수를 만들고 재정의할 수 있는 기능이 있습니다.
위의 표 Assginment Statement에는 등호 왼쪽에는 변수 이름(새 이름 또는 이전 이름)이 있고, 등호 오른쪽에 상수, 다른 변수 또는 수학 식이 나타날 수 있습니다.
변수 Qwerty가 숫자인지 문자인지 여부는 변수 Qwerty를 정의하는 식에 따라 다릅니다.
식이 숫자일 경우 Qwerty는 숫자이고, 문자일 경우 Qwerty는 문자입니다.
식을 해석하는 방법을 결정할 때 SAS는 표준 수학적 우선 순위를 따릅니다.
SAS는 먼저 지수화를 수행한 다음 곱셈과 나눗셈을 수행한 다음 덧셈과 뺄셈을 수행합니다.
괄호를 사용하여 해당 순서를 재정의할 수 있습니다.
예시를 통해서 creatign and redefining variables를 알아보겠습니다.
데이터는 다음과 같습니다.
# creatign and redefining variables Example
DATA homegarden;
INPUT Name $ 1-7 Tomato Zucchini Peas Grapes;
Zone = 14;
Type = 'home';
Zucchini = Zucchini * 10;
Total = Tomato + Zucchini + Peas + Grapes;
PerTom = (Tomato / Total) * 100;
datalines;
Gregor 10 2 40 0
Molly 15 5 10 1000
Luther 50 10 15 50
Susan 20 0 . 20
;
PROC PRINT DATA = homegarden;
TITLE 'Home Gardening Survey';
RUN;
# creatign and redefining variables result
이 프로그램에는 5개의 할당문이 포함되어 있습니다.
첫 번째는 다음과 같은 새로운 변수인 Zone을 생성합니다. Type 변수는 문자 상수인 home과 동일하게 설정됩니다.
가시성을 위해 Zucchini 변수에 10을 곱하였습니다. total은 모든 유형의 식물에 대한 합계입니다.
PerTom은 유전자 조작 토마토가 아니라 토마토 수확 비율입니다.
PROC PRINT의 보고서에는 이전 및 새 모든 변수가 포함되어 있습니다.
새롭게 생성된 값이 기존의 값을 대체했기 때문에 변수 Zucchini는 한 번만 나타납니다.
또한 다른 4개의 할당 문은 각각 새로운 변수를 생성했습니다.
새로운 변수의 경우 SAS는 생성 중인 데이터 세트에 변수를 추가합니다. 변수가 이미 있는 경우 SAS는 원래 값을 새러운 값으로 바꿉니다.
기존 이름을 사용하면 유사한 변수가 많은 데이터 세트를 복잡하게 만들지 않는다는 이점이 있습니다.
변수 Peas에 마지막 관찰에 대한 결측값이 있습니다.
이 때문에 Peas에서 계산된 변수 Total과 PerTom도 누락으로 설정되어 이 메시지가 로그에 나타납니다.
산술 연산자만 사용하는 간단한 표현식으로는 원하는 새 값을 얻을 수 없는 경우가 있습니다.
여기에서 SAS가 이미 프로그래밍을 수행했기 때문에 기능이 편리하여 작업을 단순화할 수 있습니다.
함수는 함수 이름 뒤에 괄호 안에 주어진 인수를 계산하거나 변환합니다.
SAS 함수는 다음과 같은 일반적인 형태를 갖습니다.
# SAS Functions Syntax
function-name(argument, argument, ...)
모든 함수에는 괄호가 없더라도 괄호가 있어야 합니다.
인수는 쉼표로 구분되며 변수 이름, 따옴표로 묶인 숫자 또는 문자와 같은 상수 값 또는 표현식이 될 수 있습니다.
다음 명령문은 MDY 함수와 MonthBorn, DayBorn 및 YearBorn 변수를 사용하여 생일을 SAS 날짜 값으로 계산합니다.
MDY 함수는 월, 일 및 연도에 대해 각각 하나씩 세 개의 인수를 사용합니다.
Birthday = MDY(MonthBorn, DayBorn, YearBorn);
함수는 중첩될 수 있으며, 여기서 한 함수는 다른 함수의 인수입니다.
예를 들어 다음 명령문은 INT 및 LOG라는 두 개의 중첩 함수를 사용하여 NewValue를 계산합니다.
NewValue = INT(LOG(10));
# SAS Functions Example
아래는 호박 조각 대회의 데이터로 이름 뒤에는 나이, 호박의 종류(조각 또는 장식), 참가 날짜 및 5명의 심사위원 점수가 표시됩니다.
DATA contest;
INPUT Name $16. Age 3. +1 Type $1. +1 Date MMDDYY10.
(Scr1 Scr2 Scr3 Scr4 Scr5) (4.1);
AvgScore = MEAN(Scr1, Scr2, Scr3, Scr4, Scr5);
DayEntered = DAY(Date);
Type = UPCASE(Type);
datalines;
Alicia Grossman 13 c 10-28-2003 7.8 6.5 7.2 8.0 7.9
Matthew Lee 9 D 10-30-2003 6.5 5.9 6.8 6.0 8.1
Elizabeth Garcia 10 C 10-29-2003 8.9 7.9 8.5 9.0 8.8
Lori Newcombe 6 D 10-30-2003 6.7 5.6 4.9 5.2 6.1
Jose Martinez 7 d 10-31-2003 8.9 9.510.0 9.7 9.0
Brian Williams 11 C 10-29-2003 7.8 8.4 8.5 7.9 8.0
;
PROC PRINT DATA = contest;
TITLE 'Pumpkin Carving Contest';
RUN;
# SAS Functions result
변수 AvgScore는 결측값 인수의 평균을 반환하는 MEAN 함수를 사용하여 생성됩니다. 인수를 함께 추가하고 인수로 나누는 것과 다르며, 인수가 누락되면 결측값을 반환한다.
DayEntered 변수는 해당 달의 날짜를 반환하는 DAY 함수를 사용하여 생성됩니다.
변수 Type은 UPCASE 함수를 사용하여 변환됩니다. SAS는 대소문자를 구분합니다. 예를들어, 'd'는 'D'와 같지 않다.
데이터 파일에는 변수 Type에 대한 소문자와 대문자가 모두 있으므로 UPCASE 함수를 사용하여 모든 값을 대문자로 만듭니다.
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.