안녕하세요
이번 게시글은 ' [SAS 활용 노하우] Data Handling with SAS part1' 의 연속된 게시글로 기초 SAS 문법 / 명령문 관련된 글 입니다.
6. Array
여려 개의 변수에 대해 동일한 작업을 반복할 때 array명령문과 do-end명령문을 함께 이용하면 효율적으로 작업할 수 있습니다.
< Array 문법 >
ARRAY array-name<{n}><$><length><elements>
<(initial-values)>;
다음은 sas-data-set인 test.sas의 값 중 '.'라고 표기된 것들을 모두 0으로 바꿔 처리하여 test-data-set으로 출력하는 코드입니다.
Data test;
set test_sas;
Array array_name [5] math eng sci phy music ;
Do i=1 to 5;
If array_name( i ) = . Then array_name( i ) = 0;
End;
Run;
7. Proc Sort
데이터를 지정한 변수의 기준으로 정렬하는 명령문으로 Sort Procedure에서는 NODUPKEY를 통해 변수별 중복 여부를 제거하면서 정렬이 가증합니다.
< Proc Procedure 문법 >
PROC SORT DATA=SAS-data-set <OUT=SAS-data-set >
<NODUPKEY> ;
BY <DESCENDING> variable-1
…<DESCENDING> variable-n> ;
RUN;
- DATA = 정렬하고자 하는 SAS-data-set을 지정
- OUT= 정렬한 결과 데이터를 저장할 별도의 SAS-data-set을 만들고자 할때 정의
- NODUPKY : By에 정의한 변수별에 대하여 중복여부를 검사하며, 같은 레코드가 있으면 처음 검색된 건을 OUT= SAS-data-set에 저장
- DESCENDING : 정렬 형태를 정의
- Default 는 ASCENDING 정렬
다음 코드는 sashelp.class를 age 오름차순으로 먼저 정렬하고, age가 같은 그룹 내에서는 name 내림차순으로 정렬한 결과를 work.class로 생성하는 코드입니다.
PROC SORT DATA = sashelp.class OUT = work.class;
BY age descending name;
RUN;
< 결과 >
8. Transpose
한 데이터셋에 있는 개체를 변수로, 변수를 개체로 바꾸어 새로운 sas-data-set을 생성할 수 있습니다.
< Transpose 문법 >
PROC TRANSPOSE DATA =<libref.>SAS-data-set
OUT= SAS-data-set ;
by variable(s);
id variable(s);
var variable(s);
RUN;
- Data= transpose에 사용할 input data 지정
- Out= transpose 결과 데이터명 지정
- By 분류 기준 변수 지정
- Id 컬럼으로 사용할 값을 가진 변수 지정
- Var 축 변환시 value 로 사용할 변수 지정
다음은, Transpose의 예제로 a컬럼을 분류기준 컬럼으로 b컬럼의 value “AA,BB,CC,DD”를 컬럼명으로 변환해서 c컬럼의 값을 a , b컬럼의 교차점에 값을 위치 시킨 형태로 변경 합니다.
⇨
PROC TRANSPOSE DATA = trans out = pose;
By a; Id b; Var c;
Run;
9. APPEND
하나의 테이블을 다른 테이블의 마지막에 데이터를 추가하는 명령문으로
FORCE옵션은 기본 data-set에 존재하는 변수들에 대해서만 개체를 추가하도록 지정하는 옵션입니다.
PROC APPEND BASE=<libref.>SAS-data-set
<DATA=<libref.>SAS-data-set> <FORCE>;
RUN;
• APPEND 프로시져는 하나의 SAS-data-set을 다른 SAS-data-set의 마지막에 데이터를 추가
• BASE= 데이터가 추가될 목적 SAS-data-set 을 지정
• 만약 지정한 SAS-data-set이 존재하지 않으면, DATA=에 지정한 SAS-data-set을 그대로 COPY함
• FORCE 를 지정하면 BASE= 와 DATA= 의 컬럼구조가 달라도 DATA=에 지정한 SAS-data-set의 구조로 APPEND를 수행
10. Join
하나의 테이블을 다른 테이블(들)과 결합하여 새로운 data-set을 생성하는 명령문으로 Inner Join과 Outer Join이 있습니다.
• Inner Join : 매치가 되는 행만 리턴
< Inner Join 문법 >
SELECT column-1, column-2, …
FROM table-1, table-2, …
WHERE join-condition(s)
<AND other subsetting conditions>
<other clauses>;
다음은 data set one과 two를 x 조건에 의해 inner join한 코드 입니다.
SELECT *
FROM one, two
WHERE one.x = two.x;
• Outer Join : 매치가 되는 행 + 매치되지 않는 행을 리턴
• Left / Right / Full 조인으로 나눠짐
< Outer Join 문법 >
SELECT column <, column> …
FROM table1 LEFT|RIGHT|FULL JOIN
table2
ON join-condition(s)
<other clauses>;
다음은 data set one과 two를 x 조건에 의해 left join 한 코드 입니다.
SELECT *
FROM one LEFT JOIN two
ON one.x = two.x;
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.