3장. DATA STEP 1
지난 번에 이어서 데이터 읽기 중 RAW DATA 읽기
문장 구성
* DATA 문장
*INFILE 문장
: INFILE 키워드 옆에 읽어 올 외부 파일의 경로 및 파일명을 따옴표 안에 지정
--firstobs : 자료를 불러들이기 시작하는 obs 지정. 두번째 줄부터 시작한다면 firstobs=2 라고 설정
--expandtabs : 자료의 사이가 tab으로 떨어져있는 경우
# RAW DATA 형태
- 고정(fixed-format) / - 자유(free-format) / -표준데이터유형(문자, 숫자 포함) / - 비표준데이터유형
1. 고정 포맷 & 표준 데이터 유형 => COLUMN INPUT
- 각 변수의 값을 읽는 위치가 모든 레코드에서 동일하다.
- 문법 : 변수명 / 변수유형($인지 아닌지) / 시작위치-끝위치
EX. age 1-2, gen$ 6-18, gen$3-3 = gen$3
2-1. 고정 포맷 & 비표준 데이터 유형 => FORMATTED INPUT
- 각 레코드의 변수별 데이터 값 시작위치가 동일
- INPUT @입력시작위치 변수명 입력포맷(정수부분.소수점부분)
2-2. 자유 포맷 & 비표준 데이터 유형 => FORMATTED INPUT
-변수 list 순서에 따라 구분자로 분리됨.
-INPUT 변수명 입력끝 포인터(& , :) 입력포맷(정수부분.소수점부분)
---- FORMAT 수정자 "&" , ":"
(1) &
-형식 : INPUT 변수명 & ($자릿수.)
- 한 개의 공백문자는 문자변수의 일부로 인식, 두 개 이상의 연속된 공백문자는 공백으로 인식
- 이때 & 는 2칸 이상의 공백 다음에 오는 값 전까지 인식
만약 & 다음에 자릿수를 $로 지정하면 공백까지 값을 읽은 후에 총 자릿수만큼 유효자리로 인정'
-ex. name& $10. -> name 변수 안에 있는 2칸 이상의 공백을 묶어주고 총 10자릿수까지 읽어내
(2) :
-형식 : INPUT 변수명 : ($자릿수.);
- 처음 공백이 나올 때까지 읽는다.
[수업 예시]
1) 한 칸 띄워져 있음 = 평범
& $16. <----> $16.
& 연산자 쓴 다음에 $16.
=> FORMATTED INPUT => informat(입력형식)이 w.(w 자릿수의 정수로 표현) 인 것.
=> FORMATTED INPUT 에는 자릿수 표현해줌
이때 "&" 연산자 없이 $16. 만 해도 OK
공백이 한 칸밖에 안되기 때문
2)두 칸 띄워져있음
두 칸 띄워져있을 때 <----> 한 칸 띄워져 있을 때
name 다음 team 사이에 공백 2칸 이상일 때 &로 묶어주고 $ 자릿수. 정해줌
근데 공백이 1칸 일때는 &로 묶어주면 오류뜸
그리고 만약 공백 두 칸 이상 띄워져 있는데 & 안 붙이면
$18. -> 18칸대로 쭉 읽혀짐
참고로 $자릿수. 는 많게 지정해도 똑같이 나옴
& 전까지 po읽어주고 20칸만큼 읽어
==> 정리하자면, & 는 공백 두칸 이상이 나오기 전 부분까지만 읽기
& 다음에 붙은 $자릿수. 은 해당 변수를 몇 칸 읽을 것인가 정하는것
==> & : 연산자는 formatted input 형식으로 $자릿수 정할 때 (. with period) 점 찍어야함 !
[수업 예시]
아래와 같은 테이블 고치기
문자는 input에 문자열 지정하는 $붙이면, 이때 기본적으로 8자리만 읽히게 됨
근데 다 읽고 싶으면 Length 선언 후에 list input(자유입력)해주면 됨
Length 에서 문자열 수 지정해주고 list input 밑에 해주기.
이때 length가 15만큼 읽는다고 되어 있는데 띄워쓰기 나타나면 띄워쓰기 전까지 읽어주기.
<-> 반면에 input lastname $15. 해주면 15글자를 띄워쓰기 구분없이 쭈욱 읽어준다는 것
성/ 이름 구분 올바르게 수정하려고 한다면,
(1)
-> 쭉 15칸 읽힘
그래서 올바르게 읽히려면 15칸으로 읽히게끔 추가로 3칸 더 공백을 만들어줘야함
Mc Allister 랑 Mike 사이에 공백을 4칸 띄워서 직접 만들어주기
(2)
-> & 연산자 사용해서 두 칸 띄우기 전까지 읽어주기 (correct!)
(3)
-> 13글자 쭉 읽어줌
3. 자유 포맷 & 표준 데이터 유형 =>LIST INPUT
- 입력 방법은 변수명 변수 유형 ex) age gen$
- 구분자 지정은 DLM=',' (쉼표) (기본값은 공백)
- 문자열은 공백을 포함하지 않고 8자 이하까지 나옴
- 8자를 초과하는 문자데이터에는 LENGTH 문장으로 미리 선언 ex) LENTH name $ 10 ;
===실습 예제는 다음에 자세히===
'데이터 스터디 > SAS' 카테고리의 다른 글
SAS - 변수 속성 할당 (0) | 2023.03.22 |
---|---|
SAS - 함수(문자, 난수, 날짜, 숫자 절단, 형변환) (2) | 2023.03.22 |
SAS - 데이터 읽기 실습 (input, infile, proc import, dlm='') (0) | 2023.03.22 |
SAS - 데이터 입력 및 읽기 (list input, column input, formatted input, set, infile) (1) | 2023.03.22 |
SAS - 라이브러리 설정, DATA STEP, PROC STEP (0) | 2023.03.22 |