BookmarkSubscribeRSS Feed

[배열] 배열을 사용하여서 특정 조건 변수의 값으로 신규 변수 생성

Started ‎06-11-2020 by
Modified ‎06-11-2020 by
Views 80

* 출처 : http://cafe.daum.net/statsas/3F8j/258

 

* 질문 : http://cafe.daum.net/statsas/B3m/14668

 

 

 

안녕하세요.

 

항상 여러 고민을 하다가 결국 도움을 청할만한 곳이 이곳 밖에 없네요. ㅠㅠ

감사하고 죄송하기도 하네요.

 

여튼, 질문의 내용은 이렇습니다.

하나의 데이터 셋에 여러 변수가 있습니다. 출생년이 있는 변수들인데요, 약 10개 정도가 있습니다. 그중 일정 기간 사이에서의 출생년이 가장 오래된 변수의 값만을 대표값으로 만들고자 합니다. (첨부사진 참조) 

 

예를들어, 1950년 이후 출생자 중 가장 나이가 많은 사람을 대표값으로 만들려고 합니다.

그림에서는 1989년 생이 되겠네요. 

 

 

이를 계산하기 위한 함수를 어찌 해야 할지 도무지 모르겠네요 ㅠㅠ

 

고수님의 도움을 청합니다. ( _ _ )

 

 

 

[답변 1 vega_bond 님]

 

/*1. 데이터셋 만들기*/
data ex;
input id x1 x2 x3 x4 x5;
cards;
1 2000 2015 1989 1375 1562
2 1981 1982 1949 1980 1966
;
run;
/*2. 1950년 이전 생은 연도를 9999로 만들기.. 1950년 이전 생을 제외하기 위한 약간의 편법*/
data ex2;
set ex;
array sub{5} x1 x2 x3 x4 x5;
do i = 1 to 5 by 1;
if sub{i} <=1950 then sub{i} = 9999;
end;
drop i;
run;
/*3. 변수1, 변수2, ... 중 최소값(가장 연장자) 찾기 */
data ex3;
set ex2;
king = min(x1, x2, x3, x4, x5);
run;

 

[답변2] 배열을 사용하여 처리

 

DATA EX2;
SET EX;
ARRAY SUB{5} X1-X5;
DO I = 1 TO 5 BY 1;
* 연령이 1950년생 이후 인 첫번째 변수의 값을 Z에 저장;
IF SUB{I} >= 1950 AND Z = . THEN Z = SUB{I};
* 연령이 1950년생 이후이고 위에서 저장한 첫번째 변수의 값보다 작은 경우 Z변수의 값 대체;
ELSE IF SUB{I} > 1950 AND Z > SUB{I} THEN Z = SUB{I};
END;
DROP I;
RUN;

Version history
Last update:
‎06-11-2020 10:39 PM
Updated by:
Contributors

sas-innovate-wordmark-2025-midnight.png

Register Today!

Join us for SAS Innovate 2025, our biggest and most exciting global event of the year, in Orlando, FL, from May 6-9. Sign up by March 14 for just $795.


Register now!

Article Labels
Article Tags