πŸ•ΉοΈ

5.3.1 Informat / Format

λͺ©μ°¨

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