본문 바로가기
프로그래밍/SAS

006. [do loop, array] SAS 반복문과 배열로 새로운 변수 만들기

by life_is_egg 2021. 8. 21.
반응형

 목차 

1. 반복문(do loop)

2. 배열(array)로 새로운 변수 만들기


 

egg-is-life.tistory.com/7

 

005. [proc rank] SAS 데이터 나누기/순위 구하기

 목차 1. 데이터 나누기(4등분)/순위 구하기 2. Proc rank 옵션 0. 데이터 불러오기 오늘은 proc rank에 대해 알아보기 위해 아래의 데이터를 이용했다. 머신러닝과 딥러닝을 공부할 수 있는 kaggle에서

egg-is-life.tistory.com

위 내용을 공부하다가 순위가 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명으로 해줘

 

[결과]

do문으로 만든 테이블

 

 


2. 배열(array)로 새로운 변수 만들기

array 함수는 "array array_name {dimension} <elements>;" 형태로 이루어져있다.

dimension 부분에는 원하는 크기만큼의 숫자가 들어갈 수도 있지만 "*"를 넣어 모든 값을 지정할 수도 있다.

 

이를 이용하여 새로운 변수를 만들고 모든 값들을 일정한 크기만큼 증가시키는 명령어를 실행시켜볼 것이다. 

 

여기서 사용할 데이터는 kaggle에서 다운받았다.

data.csv
0.12MB


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 버전에서 작성된 글입니다.

반응형

댓글