Gae Ko's Blog

[SAS] do loop, array문 본문

통계/SAS

[SAS] do loop, array문

Gae Ko 2017. 10. 5. 22:54

[탐사적데이터분석] 9월 25일 sas 배운거 정리

빨리 정리해야해서 머리속으로 스치는 대로 적어 본 글 ㅎㅎ 뒤죽박죽


1. do loop 에 대해서 


예제를 보며 이해해보자 

위 코드를 실행시켜보면 log창에

새로운 변수 year 와 month 그리고 x가 생성될 것임을 미리 예상할 수 있다. 

그리고 관측치는 행의 수를 뜻하므로  x의 마지막 값을 생각해보면 12개가 5번씩 반복... 60 




 


새로운 변수가 시작값을 주어지지 않았을 경우 자동으로 지정되는 값이 1임을 알 수 있다. 






데이터 a를 생성

결과 > 생성된 데이터 a의 모양은 다음과 같으며 데이터 a는 한개의 변수에 3개의 관측치를 갖고 있다.

다음처럼 코드를 추가하면

결과 >

 x=1 일 때, i= 1, 2, 3 

 x=2 일 때, i= 1, 2, 3 

 x=3 일 때, i= 1, 2, 3 




2. array 에 대해서 


배열처리 

- 반복계산 수행

- 같은 속성을 가진 많은 변수들 생성

- 데이터 읽기

- sas 데이터셋에서 변수를 관찰값으로 바꾸거나 관찰값을 변수로 바꾸기 

- 변수들 비교하기

- 테이블 검색하기


※ 1차원 배열

- 일시적으로 SAS 변수들을 그룹화 

- 같은 data 단계에서는 변수로써 작용하므로 같은 배열이름을 쓰면 안됨 (함수이름도 피해서 사용)

- 배열은 data 단계에서만 유효하고, 데이터셋의 일부분이 될 수 없음


형식 

array 배열이름{차원수} 내용;


그 이외에 대한 배열에 대해서 알고 싶다면 다음 링크로 들어가쟈 

(http://blog.naver.com/PostView.nhn?blogId=hsj2864&logNo=220627714263)


[예시] 새로운 데이터 b를 생성해보겠다.

결과 > 3개의 관측치와 2개의 변수로 이뤄진 데이터셋 b 

"." 이라고 된 데이터를 오류라고 생각해 그 값을 0으로 바꿔주고 싶다면 

아래처럼 if 문을 사용해주면 된다. → if문은 하나의 열에 대해서 자동 반복되어 적용됨

결과 >




데이터셋 b는 변수가 2개 이므로 if문을 2번 써서 오류값이라 생각하는 값을 0으로 바꾸었다.  

그런데 만약 변수가 100개가 넘는다면 어떻게 해야할까

if문을 수백번 쓸 수 없으므로 array 를 사용하여 반복한다. 



지금 배우고 있는 부분에서 array의 역할은 반복계산 수행이라고 보면 될거 같다


열의 개수만큼  즉 변수의 개수만큼 if문을 쓰는 걸 대신하기 위해 array문을 이용해보자 !

4개의 변수와 3개의 관측치를 가진 데이터 c를 생성하기

그리고 array문과 do loop문을 이용해 오류값을 0으로 바꿔준다.



로그창 >


결과 >


결과와 로그창을 보면 알 수 있듯이 자동으로 array문에서 사용한 변수가 데이터셋의 변수로 자동 추가가 된다.

i=1 -> ar{인덱스값=1} 즉 x열에서 관측값이 .인 걸 0으로 

i=2 -> ar{인덱스값=2} 즉 y열에서 관측값이 .인 걸 0으로

i=3 -> ar{인덱스값=1} 즉 x열에서 관측값이 .인 걸 0으로 

i=4 -> ar{인덱스값=1} 즉 x열에서 관측값이 .인 걸 0으로 

i=5 -> 새로 생성된 변수 i 에 대해서 저장된 값을 관측값으로 


- 배열내용에 '--' 는 처음 시작 변수와 끝변수까지 사이에 포함된 모든 변수를 의미

- '-' 는 일렬의 변수를 의미 순차적인 ex) 1-10 은 1,2,3,,,,10 

   이런 경우 변수이름의 끝은 꼭 숫자인 경우 


실습 1)

sashelp 에 있는 applianc의 unit_1 ~ unit_24의 값이 30이상이면 1로, 그렇지 않으면 0으로 값을 변경하도록 프로그램을 작성하시오 

단 array와 do문 사용하시오.



'통계 > SAS ' 카테고리의 다른 글

[SAS] VARCOMP 프로시저  (0) 2017.11.17
[SAS] TTEST 결과 분석  (0) 2017.11.16
[SAS] keep, drop 옵션  (0) 2017.10.08
[SAS] proc gplot 플롯 그리기  (0) 2017.10.07
[SAS] input 문에서 데이터입력시 (@@의 역할)  (0) 2017.10.07