BookmarkSubscribeRSS Feed

[SAS 활용 노하우] 날짜 데이터 활용 및 Retain/ Sum Statement

Started ‎09-20-2022 by
Modified ‎09-20-2022 by
Views 2,746

Working with SAS Dates 

데이터에 날짜가 있다면, 어떤 달은 30일이고, 어떤 달은 31일이고, 어떤 달은 28일로 여러가지 고려해야 할 사항이 많습니다.

 

 

 

image.png

 

SAS에서는 이러한 날짜들을 단순화할 수 있습니다. 

1960년 1월 1일을 기준으로 날짜를 카운팅 합니다. 

위의 표에는 4개의 날짜와 SAS 날짜 값이 나열되어 있습니다. 

날짜인 변수를 읽으려면 형식화된 스타일 입력을 사용합니다.

 

 

INPUT BirthDate MMDDYY10.;

 

 

위의 INPUT 문은 SAS에 MMDDYY10으로 BirthDate라는 변수를 읽도록 지시합니다.

SAS는 다양한 형태로 날짜를 읽기 위한 다양한 날짜 정보를 가지고 있습니다.

모든 정보 데이터는 데이터를 1960년 1월 1일 이후의 일 수와 동일한 수로 변환합니다.

■ Setting the default century 

코딩시 07/04/76 같이 두 자리 연도가 있는 날짜를 보면 SAS에서는 해당 연도가 속한 century를 설정해야 합니다. 1976년, 2076년, 아니면 1776년일 수 있습니다.

시스템 옵션 YEARCUTOFF= 는 연도를 지정합니다.

이 옵션의 기본값은 1920이지만 OPTIONS 문을 사용하여 이 값을 변경할 수 있습니다.

두 자리 연도가 포함된 데이터가 있을 때마다 YEARCUTOFF= 옵션을 지정할 수 있습니다.

이 명령문은 SAS가 두 자리 날짜를 1950년에서 2049년 사이에 발생한 것으로 해석합니다.

 

OPTIONS YEARCUTOFF = 1950;

 

 

 

 

 

 ■ Dates in SAS Expressions

 

 

 

DateDue = DateCheck + 21;

 

날짜 정보로 변수를 읽으면 다른 숫자 변수와 같은 산술 표현식에 사용할 수 있습니다.

예를 들어, 도서관 책의 만기가 3주라면 대출한 날짜에 21일을 더하면 만기일을 찾을 수 있습니다.

 

 

 

 

EarthDay05 = '22APR2005'D;

 

따옴표와 character D를 추가하여 표현식에서 날짜를 상수로 사용할 수 있습니다.

2005년 4월 22일의 SAS 날짜 값과 동일한 EarthDay05라는 변수를 생성합니다.

■ Functions 

날짜 function을 통해서 다양한 작업을 수행할 수 있습니다.

예를 들어, TODAY 함수는 오늘 날짜를 반환합니다.

 

 

DaysOverDue = TODAY() - DateDue;

 

위의 예시는 책이 연체된 날짜 수를 계산하기 위해 오늘 날짜에서 책 만기 날짜를 뺍니다.

■ Formats

SAS에는 다양한 형식으로 날짜를 인쇄할 수 있는 다양한 형식이 있습니다.

 

 

FORMAT BirthDate WEEKDATE17.;

 

위의 예제는 FORMAT 문은 WEEKDATE17을 사용하여 BirthDate 변수를 출력합니다.

# Format Example

 

DATA librarycards;
INPUT Name $11. +1 BirthDate DATE9. +1 IssueDate MMDDYY10.;
ExpireDate = IssueDate + (365.25 * 3);
ExpireQuarter = QTR(ExpireDate);
IF IssueDate > '01JAN2003'D THEN NewCard = 'yes';
datalines;
A. Jones 1jan60 9-15-03
M. Rincon 05OCT1949 02-29-2000
Z. Grandage 18mar1988 10-10-2002
K. Kaminaka 29may2001 01-24-2003
;
run;
PROC PRINT DATA = librarycards;
FORMAT IssueDate MMDDYY8. ExpireDate WEEKDATE17.;
TITLE 'SAS Dates without and with Formats';
RUN;

 

위의 예제를 살펴보면, IssueDate 변수에 3년을 더하여 ExpireDate(만료 날짜용) 변수를 계산합니다.

ExpireQuarter(카드가 만료되는 분기) 변수는 QTR 함수와 ExpireDate 변수를 사용하여 계산됩니다.

그런 다음 IF 문은 날짜 상수를 사용하여 2003년 1월 1일 이후에 발행된 카드를 식별합니다.

 

 image (6).png

 

 

PROC PRINT의 출력 결과입니다. 

BirthDate 변수는 날짜 형식인 반면 IssueDate 및 ExpirDate는 다음 형식을 사용합니다.

Using the RETAIN and Sum Statements

Raw 데이터를 읽을 때 SAS는 DATA 스텝의 각 반복 시작 시 결측값과 동일한 모든 변수의 값을 설정합니다.

이러한 값은 INPUT 또는 할당 문에 의해 변경될 수 있지만 SAS가 다음 관찰을 처리하기 위해 데이터 단계의 맨 위로 돌아오면 다시 결측값으로 설정됩니다.

RETAIN 문에 변수가 나타나면 해당 값은 DATA 단계의 반복에서 다음 단계로 넘어갈 때도 유지됩니다.

또한 SUM 문은 DATA 단계의 이전 반복 값을 유지하지만 식 값을 추가합니다.

■ RETAIN statement

SAS가 이전 데이터 단계 반복에서 변수 값을 보존하려면 RETAINE 문을 사용하십시오.

RETAINE 문은 데이터 단계의 어느 곳에나 나타날 수 있으며, 다음과 같은 형태로, RETAINE 키워드 뒤에 보존될 모든 변수가 나열됩니다.

 

 

 

RETAIN variable-list;

 

변수에 대해 결측값 대신 초기값을 지정할 수도 있습니다.

초기 값 앞에 나열된 모든 변수는 해당 값으로 DATA 단계의 첫 번째 반복을 시작합니다.

 

 

 

RETAIN variable-list initial-value;

 

 

 

 

■ Sum statement

합계 문은 DATA 단계의 이전 반복 값도 유지하지만 단순히 변수에 식 값을 누적적으로 추가하려는 특수한 경우에 사용합니다.

할당 문과 같은 sum 문에는 키워드가 없습니다.

 

 

variable + expression;

 

 

 이 문장은 다음과 같이 RETAINE 문과 SUM 기능을 사용하여 다시 쓸 수 있습니다.

 

 

RETAIN variable 0;
variable = SUM(variable, expression);

 

 

 

 

# RETAIN and Sum Example

위의 예제는 RETAIN 및 SUM 문을 모두 사용하는 방법을 보여 줍니다.

사용된 데이터는 마이너 리그 야구 팀인 Walla Walla Sweets의 경기 데이터입니다.

 

 

 

DATA gamestats;
INPUT Month 1 Day 3-4 Team $ 6-25 Hits 27-28 Runs 30-31;
RETAIN MaxRuns;
MaxRuns = MAX(MaxRuns, Runs);
RunsToDate + Runs;
datalines;
6-19 Columbia Peaches 8 3
6-20 Columbia Peaches 10 5
6-23 Plains Peanuts 3 4
6-24 Plains Peanuts 7 2
6-25 Plains Peanuts 12 8
6-30 Gilroy Garlics 4 4
7-1 Gilroy Garlics 9 4
7-4 Sacramento Tomatoes 15 9
7-4 Sacramento Tomatoes 10 10
7-5 Sacramento Tomatoes 2 3
;
run;
PROC PRINT DATA = gamestats;
TITLE "Season's Record to Date";
RUN;

 

 

 

경기가 진행된 날짜와 팀이 경기한 날짜 뒤에 해당 경기의 안타 및 득점이 표시됩니다.

팀은 데이터 세트에 두 개의 추가 변수를 생성합니다. 

하나는 시즌의 누적 득점 수를 보여주고 다른 하나는 현재까지 한 게임의 최대 득점 수를 보여줍니다.

다음 프로그램은 sum 문을 사용하여 누적 런 수를 계산하고 RETAIN 문과 MAX 함수를 사용하여 현재까지 게임의 최대 런 수를 결정합니다.

 

 

 image (7).png

 

 

변수 MaxRuns는 DATA 스텝의 이전 반복 값(RESENT 문에 표시되므로)의 최대값 또는 변수 Runs의 값과 동일하게 설정됩니다.

RunsToDate 변수는 값을 그대로 유지하면서 게임당 실행 수인 Runs를 추가합니다.

이렇게 하면 런 수에 대한 누적 레코드가 생성됩니다.

Version history
Last update:
‎09-20-2022 10:08 AM
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