목차
1. Informat / Format
Format은 숫자, 문자, 날짜 등 변수의 데이터 유형을 변경할 때 사용합니다.
Informat
: 데이터를 불러올 때(읽어올 때) 데이터 유형을 변경합니다. Informat 구문은 data 쓰기 단계에서 format을 지정할 때 사용합니다.
Format
: 데이터를 불러온 후(출력할 때) 데이터 유형을 변경합니다. Format 구문은 proc print 문에서 사용합니다.
두 명령어는 같은 기능을 하지만 어느 위치에 쓰이는 지에 따라 informat/format이 나누어 지게 됩니다.
하지만 informat을 많이 사용하지 않습니다. 왜냐하면 informat대신 format을 이용하셔도 포맷을 사용하실 수 있습니다.
주의사항 : 포맷을 설정할 때
'.'
을 입력해주는 것은 매우 중요합니다. 만약 사용안하고 포맷 명령어를 실행시키실 경우에는 포맷 명령어를 인식하지 못합니다.포맷은 크게 숫자 포맷, 문자 포맷, 날짜 포맷 으로 나누어집니다.
1.1 숫자포맷
- 숫자. : 자릿수 만큼 정수 값을 표시합니다.
- 숫자.숫자 : 앞자리 숫자 만큼 전체 길이 표현하고 뒷자리 숫자 만큼 소수로 표현
- BEST숫자. : 소수점(.)을 표현하여 숫자 자리 수 만큼 수를 표현합니다.
- COMMA숫자.숫자 : 3자리 숫자마다 콤마(,)를 표시합니다.
- PERCENT숫자.숫자 : 주어진 숫자를 %로 표현합니다.
주의사항 : 숫자 포맷에서 포맷의 길이를 측정할 때
'.'의 길이도 포함
되어야 합니다.1) informat
data 라이브러리.데이터셋; input 변수명 8.; datalines; 251.26 ; run;
input 에서는
숫자.
형식만 사용하실 수 있습니다.data 라이브러리.데이터셋; informat 변수명 8. 변수명 4.2 변수명 BEST6. 변수명 COMMA7. 변수명 PERCENT5.3; input 변수명 변수명 변수명 변수명 변수명; datalines; 251.26 251.26 251.26 2571.26 0.26 ; run;
data 라이브러리.데이터셋; format 변수명 8. 변수명 4.2 변수명 BEST6. 변수명 COMMA7. 변수명 PERCENT5.3; input 변수명 변수명 변수명 변수명 변수명; datalines; 251.26 251.26 251.26 2571.26 0.26 ; run;
2) format
data 라이브러리.데이터셋; input 변수명 변수명 변수명 변수명 변수명; datalines; 251.26 251.26 251.26 2571.26 0.26 ; run;
proc print data=라이브러리.데이터셋; var 변수명 변수명 변수명 변수명 변수명; format 변수명 8. 변수명 4.2 변수명 BEST6. 변수명 COMMA7. 변수명 PERCENT5.3; run;
1.2 문자포맷
문자 포맷은 처음 데이터를 생성했을 때와 같이
$숫자.
으로 사용합니다.1) informat
data 라이브러리.데이터셋; input 변수명 $12.; datalines; 홍길동 ; run;
data 라이브러리.데이터셋; informat 변수명 $12.; input 변수명; datalines; 홍길동 ; run;
data 라이브러리.데이터셋; format 변수명 $12.; input 변수명; datalines; 홍길동 ; run;
2) format
data 라이브러리.데이터셋; input 변수명 $; datalines; 홍길동 ; run;
원래 데이터에서 불러올 때 부터 값에 길이가 지정되어 있지 않으면 proc print 문에서 format을 지정해도 포맷 형식이 적용되지 않습니다.
proc print data=라이브러리.데이터셋; var 변수명; format 변수명 $12.; run;
1.3 날짜 포맷
날짜 변수는 1960년 1월 1일을 숫자 0으로 표시합니다. 이 숫자를 날짜포맷으로 변경하는 것입니다. 여기서 YY는 연도, MM은 월, DD는 일을 나타내며 YYMMDD숫자. 이나 MMDDYY숫자. 등 여러가지 방법으로 사용하실 수 있습니다. HOUR은 시를 나타냅니다.
날짜변수는 여러가지 포맷 방법이 있기 때문에 자주 사용하는 날짜 포맷에 대해 알아 보겠습니다.
- DATE숫자. : 일월년 1JAN1960
- YYMMDD숫자. : 연도-월-일 1960-01-01
- WEEKDATE. : 요일, 월일, 연도 Friday, January 1, 1960
- WORDDATE. : 월일, 연도 January 1, 1960
- NLDATE숫자. : 1960년 01월 01일
- YYMMN숫자. : 연도월 196001
- MONYY숫자. : 월연도 JAN1960
- YEAR숫자. : 연도 1960
- DATETIME숫자.숫자 : 일월년:시:분:초 01JAN1960:00:00:00
- TIME숫자.숫자 : 시:분:초 0:00:00
- HHMM숫자.숫자 : 시:분 0:00
- HOUR숫자.숫자 : 시각 0
날짜변수는 처음에 값을 입력할때는 숫자로 인식합니다. format을 이용해 새로운 테이블을 생성하거나 proc print에서 적용시켜 날짜형식으로 표기할 수 있습니다. 대표적인 날짜 포맷 형식인
DATE숫자.
을 사용해 보도록 하겠습니다.1) informat
data 라이브러리.데이터셋; input 변수명 DATE8.; datalines; 14JAN20/*'14JAN20'd 가능*/ ; run;
data 라이브러리.데이터셋; informat 변수명 DATE8.; input 변수명; datalines; 14JAN20/*'14JAN20'd 가능*/ ; run;
날짜 informat에서는 format을 사용하지 못합니다.
2) format
새로운 테이블 생성하기
data 라이브러리.새로운데이터셋; set 라이브러리.가져올데이터셋; format 변수명 DATE8.; run;
proc print문에서 format 사용
proc print data=라이브러리.데이터셋; var 변수명; format 변수명 DATE8.; run;
이렇게 해서 Format에 대해 알아보았습니다.
1.4 format 활용
name='leehojun' age=10 s='이름은 %s 입니다. 나이는 %d 입니다.' print('이름은 %s 입니다. 나이는 %d 입니다.'%(name, age)) print(s%(name, age))
이름은 leehojun 입니다. 나이는 10 입니다. 이름은 leehojun 입니다. 나이는 10 입니다.
print('1. 이름은 {} 입니다. 나이는 {} 입니다.'.format(name, age)) print('2. 이름은 {1} 입니다. 나이는 {1} 입니다.'.format(name, age)) print('3. 이름은 {} 입니다. 나이는 {} 입니다.'.format('jun', age)) print('4. 이름은 {name_} 입니다. 나이는 {age_} 입니다.'.format(name_-'!!', age_=11))
1. 이름은 leehojun 입니다. 나이는 10 입니다. 2. 이름은 10 입니다. 나이는 10 입니다. 3. 이름은 jun 입니다. 나이는 10 입니다. 4. 이름은 !! 입니다. 나이는 11 입니다.
fotmat( )에서 사용하는 대부분의 용법은 fprint( )에서도 사용합니다.
print('{} X {} = {}'.fotmat(2, 3, 6)) print('{0:4} X {1:4} = {2:4}'.fotmat(2, 3, 6)) #몇개의 자리수로 맞출것인지 print('{0:4} X {1:4} = {2:4}'.fotmat(2, 3, 6)) print('{0:4} X {1:4} = {2:4}'.fotmat(23456789, 3, 6)) print('{0:<4} X {1:<4} = {2:<4}'.fotmat(2, 3, 6)) #왼쪽정렬 print('{0:^4} X {1:^4} = {2:^4}'.fotmat(2, 3, 6)) #가운데정렬 print('{0:>4} X {1:>4} = {2:>4}'.fotmat(2, 3, 6)) #오른쪽정렬 print('{0:0>4} X {1:0>4} = {2:0>4}'.fotmat(2, 3, 6)) #오른쪽정렬을 하고 빈 공간은 0으로 채워줍니다. print('{0:~^4} X {1:!^4} = {2:#^4}'.fotmat(2, 3, 6))
2 X 3 = 6 2 X 3 = 6 23456789 X 3 = 6 2 X 3 = 6 2 X 3 = 6 2 X 3 = 6 0002 X 0003 = 0006 ~2~~ X !!!3 = #6##
#fprint( )용법 name='leehojun' print(f'1. 제 이름은 {name} 입니다.') print(f'2. 제 이름은 {name:4} 입니다.') print(f'3. 제 이름은 {name:<15} 입니다.') print(f'4. 제 이름은 {name:^15} 입니다.') print(f'5. 제 이름은 {name:>15} 입니다.') print(f'6. 제 이름은 {name:!>15} 입니다.') print(f'7. 제 이름은 {name:~>15} 입니다.') print(f'8. 제 이름은 {name:0>15} 입니다.') print(f'9. 제 이름은 {name:#>15} 입니다.')
1. 제 이름은 leehojun 입니다. 2. 제 이름은 leehojun 입니다. 3. 제 이름은 leehojun 입니다. 4. 제 이름은 leehojun 입니다. 5. 제 이름은 leehojun 입니다. 6. 제 이름은 !!!!!!!leehojun 입니다. 7. 제 이름은 ~~~~~~~leehojun 입니다. 8. 제 이름은 0000000leehojun 입니다. 9. 제 이름은 #######leehojun 입니다.
print('{0:.3f}'.format(2.1)) #소수점 3자리에 맞춰 출력 print('{0:.4f}'.format(2.1)) #소수점 4자리에 맞춰 출력 print('{0:.5f}'.format(2.1)) #소수점 5자리에 맞춰 출력
2.100 2.1000 2.10000
format(99999999999999,',') #Built in fucntions print('{0:,.5f}'.format(1234567.123456789)) #문자열의 method
'99,999,999,999,999' 1,234,567.12346
#숫자의 자리수 맞추기 print('{0:010d}'.format(99)) print('{0:010.5f}'.format(99)) print('{0:09}'.format(99)) print('{0:!9}'.format(99)) print('{0:>9}'.format(99))
0000000099 0099.00000 000000099 ERROR 000000099