獨斷論

SAS 문법 - 7: PROC PRINT 활용하기 본문

과학과 기술/SAS

SAS 문법 - 7: PROC PRINT 활용하기

부르칸 2021. 9. 3. 06:30

데이터의 일부 행(observation)만 프린트하려면 firstobs와 obs를 추가한다. 

DATA mydat;
  input subj 1-4 name $ 6-23 clinic $ 25-28
        gender 30 no_vis 32-33 type_vis 35-37
        expense 39-45;
  DATALINES;
1024 Alice Smith        LEWN 1  7 101 1001.98
1167 Maryann White      LEWN 1  2 101 2999.34
1168 Thomas Jones       ALTO 2 10 190 3904.89
1201 Benedictine Arnold ALTO 2  1 190 1450.23
1302 Felicia Ho         MNMC 1  7 190 1209.94
1471 John Smith         MNMC 2  6 187 1763.09
1980 Jane Smiley        MNMC 1  5 190 3567.00
;
RUN;
 
PROC PRINT data = mydat (firstobs=2 obs=5);
	var name clinic expense;
RUN;

 

조건에 맞는 데이터만 출력하려면 where를 사용한다. 예를들어 expense가 2000보다 큰 데이터만 출력하고자 한다면

PROC PRINT data = mydat;
	var name clinic expense;
	where expense > 2000;
RUN;

와 같이 코드를 작성하면 된다.

where는 print에서 딱 한번만 나타나야 하고 기타 조건연산자 GT GE LT LE EQ NE AND OR 등을 사용할수있다.

원하는 문자열을 포함하고 있는 행만 출력하고자 한다면 CONTAINS를 이용한다. 

PROC PRINT data = mydat;
	var name clinic expense;
	where name contains 'Smi';
RUN;

데이터값에따라 정렬하여 출력하려면 sort를 이용한다. 

proc sort data=mydat out=sortedmydat;
	by clinic no_vis;
run;

proc print data=sortedmydat;
	var clinic no_vis name;
run;

clinic에 따라 정렬하고 그 다음에 no_vis에 따라 정렬한 데이터를 sortedmydat에 저장하여 출력하였다.

만약 out=sortedmydat를 넣지 않았다면 mydat가 정렬된다. 

proc sort data=mydat;
	by clinic no_vis;
run;

proc print data=mydat;
	var clinic no_vis name;
run;

기본적으로 올림차순으로 정렬되지만 내림차순으로 정렬하고자 한다면

proc sort data=mydat;
	by descending clinic descending no_vis;
run;

proc print data=mydat;
	var clinic no_vis name;
run;

와 같이 정렬하고자 하는 변수 앞에 descending이라고 모두 넣어야 한다. 만약 by descending clinic no_vis라고 하면 clinic은 내림차순 정렬되지만 no_vis는 올림차순 정렬된다. 

각 변수의 총합을 출력하려면

PROC PRINT data = mydat;
	var name clinic expense no_vis;
	sum expense no_vis;
RUN;

var에 no_vis를 빼먹었더라도 sum에 no_vis를 출력하도록 했다면 SAS는 var에 no_vis가 있는 것으로 간주한다.

출력할때 제목과 주석을 달고자 한다면

PROC PRINT data = mydat;
    title 'Our BASIC Data Set';

    footnote1 'Clinic: ALTO = altoona,  LEWN = Lewistown,  MNMC = Mount Nittany';
    footnote3 'Type_vis: 101 = Gynecology, 190 = Physical Therapy, 187 = Cardiology';
    footnote5 'Gender: 1 = female,  2 = male';

    var name clinic expense no_vis;
    sum expense no_vis;
RUN;

title과 footnote를 이용한다. title과 footnote를 한번 설정하고 나면 다음번 print명령을 넣을때 그대로 나타나므로 성가신 옵션이다. 다음번 print에서 title과  footnote를 지워버리려면 아래와 같이 한다.

proc print data=mydat;
	title;
	footnote;
	var clinic;
run;

clinic을 출력할때는 title과 footnote가 공백이 되었다.

expense를 출력할때 화폐단위처럼 천단위에 쉼표를 추가하려면

proc print data=mydat;
	format expense dollar9.2;
	var clinic expense;
run;

dollar9.2에서 9는 달러표시($)와 쉼표와 소숫점과 숫자를 모두 포함한 자릿수이고, 2는 소숫점 이하 자릿수이다.

 

이외에 format은 다음과 같다.

형식 의미 예제
COMMAw.d 쉼표와 소숫점을 포함 comma8.2
DOLLARw.d 달러와 쉼표와 소숫점을 포함 dollar6.2
MMDDYYw. mmddyy8.이면 10/03/08로 출력, mmddyy10.이면  10/03/2008로 표시된다. mmddyy10.
w. 반올림한 정수 7.
w.d 소숫점 이하가 d자리인 수 8.2
DATEw. date7.이면 02OCT08로 표시되고 date9.이면 02OCT2008로 표시 date9.
Comments