BookmarkSubscribeRSS Feed

[SAS 활용 노하우] IF-THEN syntax 활용 예시

Started ‎09-18-2022 by
Modified ‎09-18-2022 by
Views 6,350

■ IF-THEN Statements

일부 조건에서는 할당 문을 일부 데이터에만 적용하고 모든 데이터에는 적용하지 않는 경우가 많습니다.

이를 조건부 논리(=conditional logic)라고 하며 IF-THEN 문으로 수행합니다.

# IF-THEN Syntax

 

IF condition THEN action;

 

위의 syntax는 condition 은 한 항목을 다른 항목과 비교하는 표현식이고, action은 표현식이 참일 때 SAS가 수행해야 하는 작업입니다.

 

 

# IF-THEN Example

 

IF Model = 'Mustang' THEN Make = 'Ford';

 

Model 변수가 Mustang과 같을 때, Make 변수에 Ford 가 생성하도록 지시합니다.

비교의 양쪽에 있는 항은 상수, 변수 또는 식일 수 있습니다.

이러한 용어들은 비교 연산자에 의해 구분되며, 이는 기호적이거나 mnemonic일 수 있습니다.

기호 연산자를 사용할지 아니면 mnemonic 연산자를 사용할지는 개인 선호도와 키보드에서 사용할 수 있는 기호에 따라 결정됩니다.

기본적으로 사용되는 비교 연산자는 다음과 같습니다.

 image.png

 

 IN 연산자도 비교 연산자지만 약간 다르게 작동합니다. IN은 변수의 값을 값 목록과 비교합니다.

 

 

IF Model IN ('Corvette', 'Camaro') THEN Make = 'Chevrolet';

 

 

위의 명령문은 Model의 값이 Corvette 또는 Camaro일 때마다 변수 Make 에 Chevrolet을 생성하도록 지시합니다.

하나의 IF-THEN 문에는 하나의 액션만 있을 수 있습니다.

키워드 DO와 END를 추가하면 둘 이상의 작업을 실행할 수 있습니다.

 

 

IF condition 
action; 
action; 
END; 

 

IF Model = 'Mustang' THEN DO;
Make = 'Ford';
Size = 'compact';
END;

 

DO 문장은 다음에 오는 모든 SAS 문장이 다음 문장이 될 때까지 하나의 단위로 취급되도록 합니다.

일치하는 END 문이 나타납니다.

DO 문, END 문 및 그 사이에 있는 모든 문을 함께 DO 그룹이라고 하고, AND 및 OR 키워드를 사용하여 여러 조건을 지정할 수도 있습니다.

 

 

IF condition AND condition THEN action;

 

 

IF Model = 'Mustang' AND Year < 1975 THEN Status = 'classic';

 

 

 비교 연산자와 마찬가지로 AND 및 OR은 기호 또는 mnemonic일 수 있습니다.

 image.png

 

예시를 통해서, IF-THEN 사용법을 알아보겠습니다.

데이터는 중고차에 대한 데이터로 모델, 연도, 제조업체, 좌석 수 및 색상에 대한 값이 포함됩니다.

 

 

# IF-THEN Example

 

 

DATA sportscars;
INPUT Model $ Year Make $ Seats Color $;
IF Year < 1975 THEN Status = 'classic';
IF Model = 'Corvette' OR Model = 'Camaro' THEN Make = 'Chevy';
IF Model = 'Miata' THEN DO;
Make = 'Mazda';
Seats = 2;
END;
DATALINES;
Corvette 1955 . 2 black
XJ6 1995 Jaguar 2 teal
Mustang 1966 Ford 4 red
Miata 2002 . . silver
CRX 2001 Honda 2 black
Camaro 2000 . 4 red
RUN;
PROC PRINT DATA = sportscars;
TITLE “Eddy’s Excellent Emporium of Used Sports Cars”;
RUN;

 

이 프로그램에는 세 개의 IF-THEN 문이 포함되어 있습니다. 

첫 번째는 Year 값을 1975년을 기준으로 새 변수 Status를 생성하는 간단한 IF-THEN입니다. 

마지막 IF-THEN은 DO와 END를 사용합니다.

 

 

image (4).png

 

 

■ Grouping Observations with IF-THEN/ELSE Statements

IF-THEN 문의 가장 일반적인 용도 중 하나는 데이터를 그룹화하는 것입니다. 데이터를 새로운 변수로 그룹화를 통해서 새로운 분석을 실행할 수 있습니다.

# IF-THEN/ELSE Syntax

 

IF condition THEN action;
ELSE IF condition THEN action;
ELSE IF condition THEN action;

 

 

ELSE문은 사용하는데 갯수의 제한이 없습니다. 

IF-THEN/ELSE Syntax는 아래와 같은 두가지의 특성이 있습니다.

첫째, 컴퓨터 시간을 적게 사용하는 것이 더 효율적이다.

둘째, ELSE logic는 그룹이 서로 겹치지 않아야 새로운 값을 생성할 수 있습니다. 

주택개선에 대한 설문조사의 데이터로 IF-THEN/ELSE 예제를 알아보도록 합니다.

데이터에는 소유자 이름, 수행된 작업에 대한 설명 및 비용(달러)의 세 가지 데이터 값이 포함됩니다.

이 변수에는 비용 값에 따라 높음, 중간, 낮음 또는 누락 값이 있습니다.

 

 

/* Group observations by cost; */
DATA homeimprovements;
INPUT Owner $ 1-7 Description $ 9-33 Cost;
IF Cost = . THEN CostGroup = 'missing';
ELSE IF Cost < 2000 THEN CostGroup = 'low';
ELSE IF Cost < 10000 THEN CostGroup = 'medium';
ELSE CostGroup = 'high';
DATALINES;
Bob kitchen cabinet face-lift 1253.00
Shirley bathroom addition 11350.70
Silvia paint exterior .
Al backyard gazebo 3098.63
Norm paint interior 647.77
Kathy second floor addition 75362.93
;
RUN;
PROC PRINT DATA = homeimprovements;
TITLE 'Home Improvement Cost Groups';
RUN;

 

위의 IF-THEN/ELSE 예제에는 4개의 문장이 있습니다.

첫 번째 문에서는 비용 변수에 대한 결측 데이터가 있는 관측치를 다룹니다.

이 첫 번째 문이 없으면 비용 결측값이 있는 관측치에 낮은 비용 그룹이 잘못 할당됩니다.

SAS는 결측값이 결측값이 결측값이 아닌 값보다 작으며 문자 변수에 대해 인쇄 가능한 문자보다 작으며 숫자 변수에 대해 음수보다 작다고 간주합니다. 

데이터에 결측값이 포함되어 있지 않은 경우 IF-THEN/ELSE 문을 작성할 때 결측값을 허용해야 합니다.

 image (4).png

 

 

 

■ Subsetting Data

데이터 집합에서 일부 관측치를 사용하고 나머지는 제외해서 데이터 분석을 진행할 수 있습니다.

가장 일반적인 방법은 데이터 단계에서 IF 문을 부분 집합화하는 것입니다.

부분 집합 IF의 기본 형태는 다음과 같습니다.

 

 

IF expression;

 

 

 

IF Sex = 'f';

위의 IF syntax는 식이 참이면 SAS는 DATA 단계를 계속합니다.

식이 거짓이면 해당 관찰에 대한 추가 문장이 처리되지 않으며, 해당 관찰은 생성 중인 데이터 세트에 추가되지 않으며, SAS는 다음 관찰로 이동합니다.

당신은 서브셋팅 IF를 일종의 온오프 스위치로 생각할 수 있다.

조건이 참이면 스위치가 켜지고 관찰이 처리됩니다.

조건이 거짓이면 해당 관찰이 해제됩니다.

IF 부분 집합을 원하지 않는 경우 다른 대안인 DELETE 문이 있습니다.

DELETE 문은 IF의 부분 집합과 반대되는 역할을 합니다. 서브셋팅 IF 문이 SAS에게 다음 중 포함할 관찰, DELETE 문은 SAS에 제외할 관찰을 알려줍니다.

 

 

IF expression THEN DELETE;

 

아래의 예제는 온라인 백과사전을 사용하여 읽고 싶은 도서 목록 데이터 입니다. 

각 데이터에는 제목, 대략적인 첫 공연 연도 및 도서의 유형이 포함됩니다.

 

 

 

/* Choose only comedies;*/
DATA comedy;
INPUT Title $ 1-26 Year Type $;
IF Type = 'comedy';
datalines;
A Midsummer Night’s Dream 1595 comedy
Comedy of Errors 1590 comedy
Hamlet 1600 tragedy
Macbeth 1606 tragedy
Richard III 1594 history
Romeo and Juliet 1596 tragedy
Taming of the Shrew 1593 comedy
Tempest 1611 romance
;
run;
PROC PRINT DATA = comedy;
TITLE 'Shakespearean Comedies';
RUN;

 

 

 

 위의 프로그램에서 IF Type = 'comedy'; 을 다음 명령문을 대체할 수 있습니다.

 

 

 

IF Type = 'tragedy' OR Type = 'romance' OR Type = 'history' THEN DELETE;

 

 

하지만 대체할 수 있는 명령문은 더 많은 코딩이 필요합니다.

일반적으로 더 쉬울 때 부분 집합 IF를 사용합니다.

관찰을 포함하기 위한 조건을 지정하고 관찰을 제외하기 위한 조건을 지정하는 것이 더 쉬울 때 DELETE 문을 사용합니다.

 

 

Version history
Last update:
‎09-18-2022 06:08 AM
Updated by:
Contributors

sas-innovate-white.png

Special offer for SAS Communities members

Save $250 on SAS Innovate and get a free advance copy of the new SAS For Dummies book! Use the code "SASforDummies" to register. Don't miss out, May 6-9, in Orlando, Florida.

 

View the full agenda.

Register now!

Article Labels
Article Tags