일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- proc contents
- samp;e_frac()
- filter()
- groupe_by()
- arrange()
- summarize()
- distinct()
- select()
- 대칭형 알고리즘
- mutate()
- AES
- dplyr
- sample_n()
- Today
- Total
Gae Ko's Blog
[SAS] do loop, array문 본문
[탐사적데이터분석] 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 |