BookmarkSubscribeRSS Feed

[예제로 배우는 SAS] 5. Creating Formats and Labels

Started ‎06-11-2020 by
Modified ‎06-11-2020 by
Views 978

1.PNG

 

 

안녕하세요. MYSAS입니다.

 

 

 

 

 이번 시간에는 Format에 대해서 알아보고 만들어보고, 또 적용시켜보는 방법을 알아보도록 하겠습니다

 

 

 

목  차

  1. Review
  2. Adding Labels to Your Variables
  3. Format을 이용하여 아웃풋의 질을 높이기
  4. FORMAT을 만들고 영구화 시키기!

 

 

 

  1. Review

 

 

저번 시간에 배웠던 영구적 데이터 셋을 만드는 법에 대한 복습을 간단히 하겠습니다

 

<문제>

- 다음 데이터 Survey이라는 영구적인 데이터 셋으로 저장시키시오.

- SAS 종료후에 그 데이터 셋 안에서의 평균 나이를 출력하는 프로그램을 코딩하세요

23 M 15243

30 F 11123

42 M 23444

48 F 55541

55 F 42232

- 첫번째 변수는 AGE 두번째 변수는 SEX, 그리고 나머지 다섯개의 숫자는 차례로 Q1~Q5의 값입니다

 

  1. Adding Labels to Your Variables

 

 

 - 만약 본인이 리포트를 SAS를 이용하여 만들어낼 때 그 출력물은 좀더 읽기 쉽고 흥미롭게 만들고 싶어할것입니다. SAS에서 Format 과 Label이 그 작업을 도와줄 것인데요 또한 그것들은 변수들이 무엇을 의미하는지 이해하는데에도 도움을 줄 것입니다. 

 

  - FORMAT 과 LABEL은 데이터 스텝이나 PROC 스텝 두 스텝 모둔 부분에서 만들 수 있습니다. 다음 예를 보시겠습니다

 

 

libname laern 'c:\books\learning';

 

data learn.test_scores;
 length ID $ 3 Name $ 15;
 input ID $ Score1-Score3;
 label ID = 'Studend ID'
   Score1 = 'Math Score'
   Score2 = 'Science Score'
   Score3 = 'English Score';
datalines;
1 90 95 98
2 78 77 75
3 88 91 92
;

 run;

 

 

- Library이름은 설정해주셔야한다는 점! LIBNAME을 이용해야한다는 점 잊지 않으셧죠? ^^

- LABEL문이 바로 이 LABEL을 만드는 명령문입니다. Label은 256자 보다 길 수 없구요 무한정으로 만들 수 있습니다.

- 그리고 보시다시피 Label 만드는 작업을 종료하기 전까지는 세미콜론을 붙일 필요 없으시다는 점에 유의하세요~

- 한번 그 결과를 PROC MEANS를 이용하여 살펴 보겠습니다.

 

 

Proc means data = learn.tes_scores;

run;

 

 

                                                                 The SAS System                       14:17 Thursday, February 10, 2011   2

                                                         The MEANS Procedure

                    Variable    Label            N            Mean         Std Dev         Minimum         Maximum
                    ----------------------------------------------------------------------------------------------
                    Score1      Math Score       3      85.3333333       6.4291005      78.0000000      90.0000000
                    Score2      Science Score    3      87.6666667       9.4516313      77.0000000      95.0000000
                    Score3      English Score    3      88.3333333      11.9303534      75.0000000      98.0000000
                    ----------------------------------------------------------------------------------------------

 

 

- 그럼 보시다시피 라벨이 바뀐것을 알고 계실 것입니다.

- 위에 프로그램은 보시다시피 DATA STEP에서 모두 이뤄진 결과물입니다. 그말은 즉슨, 데이터에 저장을 시키므로 데이터를 꺼내올 때마다 저런 레이블링이 되어져 나온다는 것입니다.

만약 PROC STEP에서 쓰신다면 딱 그 프로시져에서만 사용이 되고 그 데이터의 본질은 바뀌지 않습니다.

 

 

 

  1. Format을 이용하여 아웃풋의 질을 높이기

 

- SAS안에는 미리 저장된 포맷이 있습니다. 가령 회계 관련 자료를 만들고 싶으실 때 달러 기호나, 숫자 천단위마다 쉼표를 찍는 그러한 포맷을 일컫는 것입니다.

혹은 본인이 원하는 포맷을 직접 만들어 낼 수 있습니다. 가령 변수 이름이 F,M이라고 지정된 것을 본인 마음대로 Female, 혹은 Male로 바꾸는포맷을 만들 수 있다는 것입니다.

- 이러한 사용자 정의 포맷은 PROC FORMAT과 함께 만드는데요

 

 

data learn.survey;
input Age Gender$ (Q1-Q5)($1.);
datalines;
23 M 15243
30 F 11123
42 M 23444
48 F 55541
55 M 32212
;
run;

 

 

 

- 그럼 이제 포맷을 만들어서 코딩을 해보겠습니다

 

 

 

proc format;

value $gender 'M' = 'Male'

        'F' = 'Female';

value age low-29 = 'Less than 30'

30-50 = '30 to 50'

51-high = '51+';

value $likert '1' = 'Strongly Disagree'

   '2' = 'Disagree'

   '3' = 'No opinion'

   '4' = 'Agree'

   '5' = 'Strongly agree';

run;

 

 

- 일단 포맷을 하려면 VALUE문이 필요합니다. 그리고 포맷 명은 변수의 이름과 같을 필요 없지만, 편의상 같게 써도 무관합니다.

- 보시다시피 $gender이라는 포맷은 M이라는 문자를 Male로 F라는 문자를 Female로 바꾸는 포맷입니다.

- 포맷 중에 문자 변수를 다루는 포맷은 달러부호를 붙이는  점 잊지 마세요!

- 또 유의할 점은 포맷을 적용했다 한들 데이터 본질은 변하지 않습니다!

 

 

이번엔 PROC PRINT단계에서 포맷을 적용시켜 보겠습니다

 

 

proc print data= learn.survey;

var Gender Age Q1-Q5;

format Gender  $gender.

    Age age.

    Q1-Q5 $likert. ;

run;

 

 

- 이미 포맷을 한번 만들었기 때문에 위와 같이 언제나 적용이 가능 한 것입니다. 

 

 

  1. FORMAT을 만들고 영구화 시키기!

 

 

- 앞선 강의들에서 말씀드렸다시피 LABEL이나 FORMAT문을 DATA STEP에서 쓴다면 영구화 시킬 수 있습니다. 

 

  1. SAS FORMAT을 저장해 놓을 라이브러리를 생성한다.

 

  1. PROC FORMAT단계에서 LIABRARY =  라이브러리이름    옵션을 사용합니다. 

 

- 자 그럼 만든 포맷을 C:\books\learning \ formats 폴더에 저장시키는 코딩을 해보겠습니다

 

 

libname myfmts 'c:\books\learning\formats';

 

proc format library=myfmts;

value $gender 'M' = 'Male'

   'F' = 'Female';

value age low-29 = 'Less than 30'

30-50 = '30 to 50'

51-high = '51+';

value $likert '1' = 'Strongly Disagree'

   '2' = 'Disagree'

   '3' = 'No opinion'

   '4' = 'Agree'

   '5' = 'Strongly agree';

run;

 

 

 

- 이번에는 이렇게 저장한 포맷을 꺼내서 쓰는 법을 배우도록 하겠습니다. 그렇기 위해서는 SAS로 하여금 우리가 만든 포맷이 어디있는가를 알려줘야 하는데 바로 FMTSEARCH  옵션을 여기서 사용합니다. 

-  예를들어 우리가 만든 myfmts 라는 라이브러리에 만든 우리의 포맷을 꺼내서 쓰고 싶을땐

 

 

options fmtsearch = (myfmts);

 

 

- 그럼 이제 한번에 ! 텍스트 파일에서 자료를 불러내고 우리가 만들어넨 포맷을 적용시키는 코딩을 보여드리겠습니다

 

 

 

libname learn 'c:\books\learning';

libname myfmts 'c:\books\learning\formats';

options fmtsearch = (myfmts);

 

data learn.survey2;

infile 'c:\books\learning\survey.txt' pad;

input Age Gender$ (Q1-Q5)( $1.);

format Gender $gender.

Age age.

Q1-Q5 $likert.;

run;

 

 

 

 

- 그리고 PROC PRINT를 실행해 본다면

 

 

 

 Data set SURVEY                                      30

                                                      2011년 02월 15일 화요일 오후 01시53분32초

 

            OBS    Age             Gender    Q1                   Q2

 

             1     Less than 30    Male      Strongly Disagree    Strongly agree

             2     30 to 50        Female    Strongly Disagree    Strongly Disagree

             3     30 to 50        Male      Disagree             No opinion

             4     30 to 50        Female    Strongly agree       Strongly agree

             5     51+             Male      No opinion           Disagree

 

            OBS    Q3                   Q4                   Q5

 

             1     Disagree             Agree                No opinion

             2     Strongly Disagree    Disagree             No opinion

             3     Agree                Agree                Agree

             4     Strongly agree       Agree                Strongly Disagree

             5     Disagree             Strongly Disagree    Disagree

 

 

 

 

 

수고하셨습니다. 문제는 다음 시간에 리뷰용으로 올려드리겠습니다~ ^^~


본 자료의 저작권은 sas에 있습니다

Version history
Last update:
‎06-11-2020 09:22 PM
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