데이터 스터디/SAS

SAS - raw 데이터 읽기 (length, & : 연산자)

케이와이엠 2023. 3. 22. 12:07

 

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 ;

 

===실습 예제는 다음에 자세히===