안녕하세요. MYSAS입니다.
이번 시간에는 Format에 대해서 알아보고 만들어보고, 또 적용시켜보는 방법을 알아보도록 하겠습니다
목 차
저번 시간에 배웠던 영구적 데이터 셋을 만드는 법에 대한 복습을 간단히 하겠습니다
<문제>
- 다음 데이터 Survey이라는 영구적인 데이터 셋으로 저장시키시오.
- SAS 종료후에 그 데이터 셋 안에서의 평균 나이를 출력하는 프로그램을 코딩하세요
23 M 15243
30 F 11123
42 M 23444
48 F 55541
55 F 42232
- 첫번째 변수는 AGE 두번째 변수는 SEX, 그리고 나머지 다섯개의 숫자는 차례로 Q1~Q5의 값입니다
- 만약 본인이 리포트를 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에서 쓰신다면 딱 그 프로시져에서만 사용이 되고 그 데이터의 본질은 바뀌지 않습니다.
- 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;
- 이미 포맷을 한번 만들었기 때문에 위와 같이 언제나 적용이 가능 한 것입니다.
- 앞선 강의들에서 말씀드렸다시피 LABEL이나 FORMAT문을 DATA STEP에서 쓴다면 영구화 시킬 수 있습니다.
- 자 그럼 만든 포맷을 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에 있습니다
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.