BookmarkSubscribeRSS Feed

[SAS 활용 노하우] 프로시저와 함께 사용되는 명령문

Started ‎01-31-2022 by
Modified ‎01-31-2022 by
Views 1,508

 

 

PROCEDURE STEP 은 이미 생성되어 있는 SAS 데이터셋에 대해서 필요한 연산과 분석을 수행하고, 분석을 수행하고, 분석된 결과를 인쇄하거나, 특별한 형태의 새로운 데이터 셋을 생성하는 등의 기능을 가지는 프로시저를 호출하여 사용자가 원하는 작업을 수행하는 단계입니다.

프로시저 단계는 데이터 단계와 서로 특별한 순서 없이 결합하여 작업수행 과정의 어느 위치에서도 이미 생성된 데이터셋에 대해 적용할 수 있습니다.

프로시저를 사용할 때 출력을 보기 좋게 하거나 특정 조건에 맞는 데이터만으로 작업을 수행하기 위해서 다양한 명령문을 함께 사용할 수 있는데, 이번 게시글에서는 프로시저와 함께 사용할 수 있는 몇 가지 명령문에 대해서 설명하도록 합니다.

1. OPTIONS 명령문

OPTINS 명령문은 출력결과의 형식을 규정하거나 SAS의 여러가지 사용환경을 설정하기 위한 옵션들을 지정하는 명령문입니다. 이번 예제에서는 자주 사용되는 몇 가지 옵션들에 대해서 설명하겠습니다.

OPTIONS LINESIZE = 80 PAGESIZE = 50 NODATE PAGED0 = 1;

PROC PRINT DATA= WORK.HTWT;
RUN;

 

 

■ CENTER | NOCENTER : 출력결과를 가운데 정렬할 것인지 아니면 왼쪽 정랼할 것인지를 결정한다.

■ DATE | NODATE : 현재 날짜의 출력 여부를 지정한다.

■ NUMBER | NONUMBER : 페이지 번호의 출력 여부를 지정한다.

■ LINESIZE = n : 출력결과에서 한 줄의 길이를 지정한다.

■ PAGESIZE = n : 출력결과에서 한 페이지에 들어가는 줄 수를 지정한다.

■ PAGENO = n : 새로운 페이지 번호를 지정한다.

위와 같은 OPTIONS 명령문에 의해서 지정된 사항들은 그 내용을 변경하는 새로운 설정이 있거나 SAS가 다시 구동되기 전까지는 계속 영향을 줍니다.

위의 예제에서 사용된 PRINT 프로시저는 데이터셋의 내용을 출력(Resilts Viewer) 윈도우에 출력하는 기능을 가지고 있습니다.

2. TITLE , FOOTNOTE 명령문

TITLE , FOOTNOTE 명령문은 출력되는 결과에 제목(title)과 주석(footnote)을 붙이기 위한 명령문입니다.

위에서 볼 수 있듯이 이 두 개의 명령문은 프로시저 단계의 내부에 사용할 수도 있고 특정 프로시저와 관계없이 독자적으로 사용할 수도 있습니다. TITLE과 FOOTNOTE 명령문의 일반적 사용형식은 다음과 같습니다.

 

 

TITLEn 'text'; 또는 FOOTNOTEn 'text';

 

 

이와 같은 TITLE 이나 FOOTNOTE 명령문에 의해 나타나는 제목이나 주석은 여러 줄에 걸쳐 겹쳐 출력되도록 처리할 수 있는데, 앞의 사용형식에서 n 이 바로 출력되는 제목이나 주석의 줄 번호를 나타내게 됩니다.

이번 예제에서는 첫 번째 TITLE 명령문과 같이 줄 번호를 지정하지 않는 것은 TITLE 1 을 사용하는 것과 같습니다. 또한 출력된 제목과 주석의 내용을 살펴보면, 여기서 사용된 두 개의 프로시저 단계인 FREQ 와 MEANS 의 처리결과가 OPTIONS 명령문에 의해서 지정된 PAGENO = 1 에 따라 페이지 1과 페이지 2에 출력되고 있습니다.

OPTIONS 명령문의 경우와 마찬가지로 TITLE과 FOOTNOTE 명령문은 특정 프로시저에만 영향을 주는 것이 아니라 이후의 모든 프로시저의 출력에 영향을 줍니다.

즉, 새로운 TITLEn 이나 FOOTNOTEn 명령문이 나타나기 전까지는 기존의 제목과 주석이 계속 출력되는 것입니다. 그러나 새로운 TITLEn 명령문이 사용되면 기존의 제목 중 n 보다 큰 줄 번호를 사용한 TITLE 명령문에 의해서 붙여진 제목은 모두 무시됩니다.

따라서 다음과 같이 TITLE 명령문을 사용하면 기존의 모든 TITLE 명령문을 무시하게 됩니다.

 

 

TITLE; 또는 TITLE1;

 

 

 

아래에 사용된 데이터는 SASUSER에 있는 HTWT 데이터로 NAME, GENDER, DEPT, AGE, HEIGHT, WEIGHT 6개 변수가 있는 데이터 입니다.

 

 

image (25).png

 

 

 

OPTIONS PAGESIZE=30 NODATE PAGENO=1;

TITLE '---DATA-SET-HTWT---';

PROC FREQ DATA=SASUSER.HTWT;
TITLE2 '>>> 성별 빈도 <<<';
TABLES GENDER;
RUN;

TITLE2 ' >>> 기초 통계량 <<<';
TITLE3 ' ***  ' 성별 ' ***';
PROC MEANS DATA= SASUSER.HTWT MEAN;
CLASS GENDER;
VAR HEIGHT WEIGHT;
FOOTNOTE '키와 몸무게';
RUN;

 

 

 

 

image (26).png

 

 

 

TITLE3 명령문에서와 같이 제목에 인용부호 (' ')가 포함된 경우에는 다음과 같은 이중 인용부호 (" ")를 사용해서 인용부호가 제목의 일부임을 구변해 주어야 합니다.

3. WHERE 명령문

WHERE 명령문은 특정한 조건을 만족하는 데이터에 대해서만 해당 프로시져를 수행시키기 위해서 사용할 수 있는데 비교연산자나 IN 또는 CONTAINS 명령어를 사용하여 조건식을 지정할 수 있습니다.

 

OPTIONS NODATE PAGENO=1;
TITLE '---DATA-SET-HTWT---';
FOOTNOTE;

TITLE2 ' ***** 연령 > 20 ***** ';
PROC MEANS DATA= SASUSER.HTWT MEAN STD;
WHERE AGE > 20;
CLASS GENDER;
VAR HEIGHT WEIGHT;
RUN;

TITLE2 '***** DEPT : STAT OR MATH *****';
PROC PRINT DATA = SASUSER.HTWT;
WHERE DEPT CONTAINS ' AT';
RUN;

 

두번째 WHERE 명령문에서와 같이 CONTAINS 명령어를 사용하면 해당 변수는 지정된 특정한 문자열을 포함하고 있는지를 검토하여 이를 만족하는 데이터에만 프로시저를 적용하게 됩니다.

따라서 이번 예제에서는 변수 DEPT 가 문자열 'AT' 를 포함하고 있는 STAT OR MATH 인 경우에 한정해서 PRINT 프로시저가 수행합니다.

IN 명령어는 WHERE 명령문에서 다음과 같이 여러 개의 자룟값을 나열할 때 매우 유용하게 사용됩니다.

 

 

WHERE age IN (16,19,21,28);
WHERE name IN ('강민호','최병호','장순미','김미숙');

 

 

IN 명령어를 사용할 때는 위와 같이 콤마(,) 또는 하나 이상의 공백으로 구분하여 자룟값을 나열하면 되는데, 이 때 문자변수에 대해서는 각 문자열을 인용부호 (' ')로 닫아주어야 합니다.

"WHERE age IN (16,19,21,28);"를 OR 연산자를 이용해서 동일하게 표현하려면 다음과 같이 지정해야 합니다.

WHERE age = 16 OR age = 19 OR age = 21 OR age = 28; 

 

나열해야 할 자룟값이 많은 경우에는 IN 명령어를 사용하는 것이 OR 로 연결하여 나열하는 것보다 훨씬 효율적입니다.

4. FORMAT, LABEL 명령문

FORMAT 명령문은 변수에 대한 출력포맷을 지정하는 것으로서 SAS에 내장되어 있는 포맷 또는 사용자 포맷을 이용할 수 있습니다. 이와 같은 출력 포맷은 자룟값 자체를 변경하는 것이 아니라 프로시저를 이용하여 데이터를 출력하거나 VIEWTABLE 윈도우에 데이터셋을 디스플레이할 때만 자룟값을 바꾸어 보여주는 것이기 때문에, 데이터의 저장이나 관리에 매우 효율적으로 사용될 수 있습니다.

 

 

TITLE ' >>>>> 출력포맷의 이용  <<<<<';

PROC PRINT DATA = SASUSER.HTWT LABEL;
FORMAT DEPT $1. HEIGHT 5.1 WEIGHT 5.1;
LABEL HEIGHT = '신장(CM)' WEIGHT = '체중(KG)';
RUN;

 

 image (27).png

 

 

변수 DEPT (학과) 는 문자변수로서 1바이트가 할당되어 첫 글자만 출력되었고 변수 HEIGHT와 WEIGHT 에는 전체 자릿수를 5자리로 하고 소수점 이하 자릿수를 1로 출력하도록 지정한 것입니다.

LABEL 명령문은 각 변수에 새로운 레이블(변수에 대한 설명)을 부여하기 위해 사용되며 위의 예제에서는 변수 HEIGHT 와 WEIGHT 에 대하여 원래의 레이블인 '키', '몸무게' 대신에 새로운 레이블인 '신장(CM)' , '체중(KG)' 이 출력되어 있습니다.

한편 FORMAT 명려문과 LABEL 명령문은 프로시저 단계뿐만 아니라 데이터 단계에서도 사용할 수 있는데 데이터 단계에서 출력포맷이나 레이블이 지정되어 있으면 이 데이터셋을 사용하는 모든 프로시저의 수행에 영향을 주지만, 프로시저 내에 FORMAT 명령문이나 LABEL 명령문을 사용하면 해당 프로시저가 수행되는 동안에만 영행을 줍니다.

 

 

 

Version history
Last update:
‎01-31-2022 09:42 AM
Updated by:
Contributors

sas-innovate-white.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.

 

Early bird rate extended! Save $200 when you sign up by March 31.

Register now!

Article Labels
Article Tags