목차
1. 반복문(do loop)
2. 배열(array)로 새로운 변수 만들기
위 내용을 공부하다가 순위가 0위부터 출력되어 나오길래,
반복문과 배열을 사용하여 0위를 1위로 만드는 방법에 대해 알아볼 것이다.
1. 반복문(do loop)
데이터전처리를 하거나 분석을 하다 보면 반복적으로 같은 구문을 시행해야 할 때가 있다.
매크로를 이용하여 처리할 수도 있지만 반복문을 작성해볼 것이다.
파이썬에서는 while이나 for문이 있듯이 sas에는 do문이 있다.
do loop의 "do 변수명 = 시작값 to 끝 값 by 증가량; end;" 형식을 이용하여 테스트용 테이블을 만들어볼 것이다.
data test;
do grade=1 to 3;
do class=1 to 5;
number=20;
output;
end; /* 'do class ~' 명령 종료 */
end; /* 'do grade ~' 명령 종료 */
run;
명령어 해석
① 2행: 테이블 test에 1학년(grade)부터 3학년을 만들어줘
② 3행: 각 학년 별로 1반(class)부터 5반까지 만들어줘
③ 4행: 모든 반에 인원 수(number)는 20명으로 해줘
[결과]
2. 배열(array)로 새로운 변수 만들기
array 함수는 "array array_name {dimension} <elements>;" 형태로 이루어져있다.
dimension 부분에는 원하는 크기만큼의 숫자가 들어갈 수도 있지만 "*"를 넣어 모든 값을 지정할 수도 있다.
이를 이용하여 새로운 변수를 만들고 모든 값들을 일정한 크기만큼 증가시키는 명령어를 실행시켜볼 것이다.
여기서 사용할 데이터는 kaggle에서 다운받았다.
proc sort data=data; by id; run;
proc rank data=data groups=10 out=new;
var radius_mean;
ranks rank;
run;
이건 지난번에 proc rank로 작성했던 순위를 만드는 코드다.
여기에 아래 코드를 합쳐 실행시켜볼 것이다.
data final;
set new;
array decile {*} rank;
array score {*} rank_s ;
do i=1 to dim(decile);
score{i}= decile{i}+1;
end;
keep id radius_mean rank rank_s;
run;
proc print data=final; run;
명령어 해석
① 4행: rank 모든 값들을 decile이라는 이름을 지닌 배열에 지정해줘
② 5행: rank_s 모든 값들을 score이라는 이름을 지닌 배열에 지정해줘
③ 7~9행: do문을 사용해 decile(rank)에 지정되어 있는 모든 값들을 1씩 증가시켜 score(rank_s)에 저장해줘
** 반복문(do)에서 to 다음에 dim함수를 이용하여 끝 값을 입력하지 않고 사용 가능하다.
[결과]
- SAS Enterprise Guide 8.2 버전에서 작성된 글입니다.
'프로그래밍 > SAS' 카테고리의 다른 글
007. [Libname] SAS 라이브러리 생성 (0) | 2021.08.21 |
---|---|
005. [proc rank] SAS 데이터 나누기/순위 구하기 (0) | 2021.08.21 |
004. [proc sgplot] SAS sgplot 여러가지 옵션 (2): 색상 (0) | 2021.08.21 |
003. [proc sgplot] SAS sgplot 여러가지 옵션 (1) (0) | 2021.08.20 |
002. [sort, merge] SAS 정렬 & 파일 합치기 (0) | 2021.08.20 |
댓글