BookmarkSubscribeRSS Feed

[SAS 활용 노하우] Creating Macro Variables

Started ‎04-25-2022 by
Modified ‎04-25-2022 by
Views 3,544

 

 

SAS에서는 myvars라는 새 데이터 세트에 mymean, mysd라는 두 개의 변수를 생성하면, DATA 또는 PROC 단계에서 mymean과 mysd라는 변수를 사용할 수 없습니다.

테스트 데이터에서(train: test 데이터세트) y 값을 mymean과 mysd로 표준화할 수 없습니다.

myvars 데이터 세트에서 이미 사용한 mymean, mysd 두 개의 변수는 다른 데이터 세트의 PRINT 프로시저에서 사용할 수 없습니다.

R에서는 새로운 변수를 생성하기 때문에 이러한 문제가 생기지 않습니다.

아래의 예제에서는 mymean 변수와 mysd 변수에서 y 값을 대입하여 standardize 할 수 있습니다.

 

 

image.png

 

 

 

이번 게시글은 SAS에서 위에서 제시한 프로세스를 수동적으로 복제하는 방법을 포스팅합니다.

위의 R 코드에서 데이터가 변경되거나, 123.45를 입력하지 않고 다른 숫자를 입력했을 시 y의 mean과 y의 sd를 구하는 방법들을 알아보려 합니다.

 

 

 

Manually Create a Macro Variable

 

매크로 변수를 수동으로(Manually) 생성하는 쉬운 방법에 대해 설명합니다. 그런 다음 SQL 절차를 사용하여 프로세스를 자동화합니다.

R에서처럼 매크로 변수를 만들려면 SAS에서 %LET 문을 사용합니다.

새 변수 이름을 아래의 syntax 를 사용하여 원하는 값과 동일하게 설정하면 됩니다.

 

 

 

SAS Macro Variable 만들기

 

%LET variable-name = value;

 

# SAS Macro Variable 예시

 

height 변수에 67 (numeric variable) 이라는 값을 아래와 같은 syntax로 만들 수 있습니다.

 

%LET heignt = 67;

 

name이라는 변수에 'Jordan Bakerman' (character variable) 값을 아래와 같은 syntax 로 만들 수 있습니다.

 

%LET name = Jordan Bakerman;

 

SAS는 R과 다르게 텍스트 문자를 저장할 때도 따옴표를 사용하지 않습니다. 만약, 매크로 변수에서 따옴표를 사용해서 값을 지정한다면 따옴표도 같이 문자변수로 인식하여 입력한 내용 그대로 저장됩니다.

매크로 변수의 특성 중 몇 가지를 살펴보겠습니다.

1) 숫자 토큰( number tokens) 은 텍스트 문자열로 저장됩니다.

2) 최소 길이는 0입니다. (null value)

3) 최대 길이는 64k character입니다.

4) case is preserved.

5) 선행 및 후행 공백이 제거됩니다.

6) 따옴표는 값의 일부로 저장됩니다.

 

 

 

 

Using Macro Variables

 

위의 게시글은 매크로 변수를 생성하는 방법을 알아보았습니다.

매크로 변수 참조(macro variable references) 는 아래의 syntax와 같이 &(=ampersand) 로 시작하고 그 뒤에 매크로 변수 이름이 옵니다.

 

&myvar

 

변수 myvar이 있다고 가정한다면, DATA 또는 PROC 단계 내에서 사용하려면 &myvar을 사용할 수 있습니다.

매크로 변수 참조는 아래와 같은 몇 가지 특성이 있습니다.

1) 프로그램 내 어디에나 나타날 수 있으므로 사용자가 원하는 데이터 또는 PROC 단계에서 사용할 수 있습니다. %LET 문을 사용하면 매크로 변수가 글로벌 해집니다.

2) 매크로 변수 이름은 대소문자를 구분하지 않습니다. 예를 들어 myvar는 대소문자를 구분하지 않습니다. 하지만 그 해당 변수에 저장한 값은 대소문자를 구분합니다.

3) 매크로 프로세서로 전달됩니다.

 

 

 

Examples

아래의 예제는 macro variables를 사용한 몇가지 예시입니다.

 

%let year = 2022;

proc print data=ameshousing;
    where yr_sold = &year;
    var yr_sold saleprice;
    title "Price of Homes Sold in &year";
run;

 

위의 예제에서 2022 값은 두 가지 사례에서 사용됩니다.

하나는 where 문이고, 다른 하나는 titie 문입니다.

매크로 변수를 사용하여 두 예제 모두에서 2022 값을 쉽게 변경하도록 프로그램을 업데이트하는 방법은 아래와 같습니다.

먼저, %LET 문을 사용하여 year이라는 새 매크로 변수를 만들고 2022 값을 같게 만듭니다.

연도를 2023, 2024 등으로 변경하려면 어떻게 해야할까요?

%LET 문에서 매크로 변수를 변경하기만 하면 됩니다.

그렇게하면 PRINT 절차의 모든 부분에서 변경할 필요가 없습니다.

PRINT 프로시저를 다시 실행하고 있지만 이번에는 WHERE 문에서 Garage_type_2를 사용하고 있음을 알 수 있습니다.

해당 변수는 Attached 또는 Detached입니다. WHERE 문에서 문자 데이터를 지정하기 때문에 Attached 값을 인용해야 합니다. 또한 Attached라는 단어가 TITLE 문에 있습니다.

매크로 변수를 사용하여 해당 값을 더 쉽게 변경할 수 있는 방법은 무엇입니까?

물론 %LET 문을 활용하여 gtype이라는 새로운 매크로 변수를 만들고 Attached와 같게 합시다.

A가 데이터 세트에 표시되는 방식이기 때문에 A를 대문자로 유지하는 것이 매우 중요합니다.

그런 다음 Attached라는 단어가 있던 PRINT 프로시저와 WHERE 및 TITLE 문에 gtype 매크로 변수를 제공합니다.

큰따옴표는매크로 변수를 인용할 때 매우 중요합니다.

 

이렇게 하면 매크로 변수를 해결할 수 있기 때문입니다. &gtype은 Attached라는 단어로 해석됩니다.

작은따옴표를 사용한 경우 &gtype으로 남습니다. &gtype이라는 garage_type_2에 대한 데이터 세트에 값이 없습니다. 매크로 변수로 작업할 때 확실하지 않은 경우 큰따옴표를 사용하면 됩니다.

 

 

 

%let gtype = Attached;
proc print data=ameshousing;
where garage_type_2 = "&gtype";
var yr_sold saleprice;
title "Homes Sold with &gtype Garage";
run;

 

 

Creating Global Macro Variables

LET 문을 사용하여 매크로 변수를 수동으로 생성하는 방법을 살펴보았습니다.

이제 SQL 및 다음 단계를 사용하여 프로세스를 자동화합니다.

step1. SAS 데이터 테이블을 생성합니다. 데이터 세트를 조회하기 위해서는 유용한 정보가 포함된 데이터 세트가 필요합니다.

step2. PROC SQL을 사용하여 매크로 변수를 만듭니다.

 

 

PROC SQL;
    SELECT variable-name
    INTO :macro-variable-name
    FROM data-table-name;

 

 

Step1. Create a SAS Data Table

OUTPUT 문을 사용하여 MEANDS 절차를 실행하여 평균 및 표준 편차 값을 가진 새 SAS 데이터 세트를 생성합니다. 이 데이터 집합의 변수 이름은 평균과 sd가 됩니다.

 

 

 

 

Step2. Use PROC SQL to Create a Macro Variable

데이터를 쿼리하고 새 매크로 변수를 만들 수 있습니다. 이를 위해 PROC SQL을 사용합니다.

아래의 코드와 같이 SELECT 문으로 시작하여 데이터 세트의 변수 이름(이 경우 평균)을 지정합니다.

into 키워드와 콜론 연산자를 사용하고 새 매크로 변수 sp_mean을 지정합니다. 마지막으로 어떤 데이터 세트를 보아야 하는지 알려줍니다. 통계입니다. 마찬가지로 표준 편차를 선택하고 다시 stats 데이터 세트에서 sp_sd라는 새 매크로 변수에 넣습니다.

 

 

proc sql;
select mean into :sp_mean from stats;
select sd into :sp_sd from stats;
quit;
Version history
Last update:
‎04-25-2022 09:45 AM
Updated by:
Contributors

SAS Innovate 2025: Register Now

Registration is now open for SAS Innovate 2025 , our biggest and most exciting global event of the year! Join us in Orlando, FL, May 6-9.
Sign up by Dec. 31 to get the 2024 rate of just $495.
Register now!

Article Labels
Article Tags