BookmarkSubscribeRSS Feed

[SAS 활용 노하우] Data Handling with SAS part2

Started ‎01-09-2021 by
Modified ‎01-11-2021 by
Views 1,671

 

안녕하세요 

 

이번 게시글은 ' [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;

 

< 결과 >

그림1.png

 

 

 

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컬럼의 교차점에 값을 위치 시킨 형태로 변경 합니다.  

 

스크린샷 2021-01-09 오후 5.18.43.png

 

 

 

              스크린샷 2021-01-09 오후 5.19.26.png

 

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이 있습니다.

 

그림1.png

 

 

 

• 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;

 

 

     2.png              3.png              그림1.png

• 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;
Version history
Last update:
‎01-11-2021 12:43 AM
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