본문 바로가기

sas코딩9

[SAS] sas에서 코딩방법에 따른 처리 속도의 차이(if문의 위치) sas로 빅데이터를 핸들링하면서 항상 답답하고 문제되는것이 처리속도 시간이다. 큰데이터를 다룰수록 속도와의 전쟁인데, 각자 자기만의 스타일로 다양하게 프로그래밍하지만 코딩을 가장 최적화 시키면, 데이터가 크면 클수록 처리속도 시간의 차이는 엄청나다. 아래의 간단한 예를 보고 data step에서 if문 코딩을 최적화하는 방법을 알아보도록 하자. 위의 두개의 데이터셋 생성의 조건은 다음과 같다. test 데이터셋의 department변수에서 기획부값만 가져오고 각각 사칙연산의 결과를 나타내는 변수를 생성하라. 위의 결과 처럼 코딩의 순서는 다르지만 결과는 같다. 하지만 만약 이 데이터가 예제와 달리 방대한 양의 데이터라면 이 두가지의 코딩 처리속도는 분명히 차이가 난다. 왼쪽의 코딩은 if문이 먼저 나타나.. 2014. 5. 16.
[SAS] sas에서 그룹별로 각각 두 개 이상 변수에 특정값이 포함된 경우 추출하는 방법 sas에서 그룹별로 여러 변수에 특정값이 있는 경우의 그룹만 추출하는 방법을 알아보도록 하자. 역시나 언어로 이해하기는 어려우니 그림을 통해서 무엇을 할 것인가에 대해 알아보자. 위의 그림을 통한 설명처럼 간단하게 key(그룹)별로 여러변수에 특정값이 존재하는 경우만 출력한다는 것이다. [코딩과정] /*예제 데이터 생성*/ data h; input key$ code1$ code2$; cards; 111 a b 111 b b 111 b a 222 a b 222 a b 333 b b 333 b a 333 b b 444 a b 444 b a ; run; /*원데이터에서 code1에 a값이 있는 키값만 출력*/ data h1(drop=code1 code2); set h; if code1='a'; run; /*키.. 2014. 5. 14.
[SAS] sas에서 obs를 생성하는 방법. 누적 숫자값을 가진 변수 생성 방법 sas에서 관측치를 구별하는 유니크한 값을 만들거나 obs값을 가진 변수를 생성하고 싶을때 사용하는 방법이다. 사진을 이용해 간단하게 알아보자.[아래 사진 참조] 위의 사진을 보면 jin이라는 테스트 데이터는 id와 cost라는 두개의 변수로 구성된 데이터셋이다. 옆에 변수를 하나더 생성하는데 1씩 증가하는 누적값을 가진 변수를 하나 생성해 보는 것이다. [코딩설명] retain은 변수를 순서대로 나열할때도 자주 사용되지만 초기값을 지정할때도 사용이 된다. retain obs_num 0; obs_num이라는 새로운 변수를 생성하는데 초기값을 0으로 지정한다. obs_num+1; obs_num에 1을 더한다. 이렇게 실행하면 첫번째 관측치가 초기값 0으로 지정되고 그 밑의 명령어에 의해서 1값이 더해진다... 2014. 4. 15.
[SAS] sas proc sql 그룹별 합계구하기 /*sas proc sql로 그룹별 합계구하기*/ data a; input key cost; cards; 111 1 222 2 333 3 222 2 111 1 111 1 333 3 444 4 ; run; /*key변수를 그룹으로 cost의 합계를 구하는 sql문*/ proc sql; create table a1 as select key, sum(cost) as sum from a group by key; quit; run; www.sasbigdata.com 김진휘 2014. 3. 14.
[SAS] SAS에서 숫자값이 십진수로 변경될 때 입력값 그대로 출력하기 SAS를 이용하다 보면 숫자값이 큰경우 자동으로 출력결과가 십진수로 변경되는 경우가 생긴다. 한자리수까지 정확한 수치를 보고 싶은데 십진수로 변환되어 곤란한 경우가 많다. 큰 숫자값이 십진수로 자동 변환될 경우 원래 입력값 그대로 출력하는 방법을 알아보자. 보통 위의 그림처럼 숫자값이 클 경우 오른쪽 결과처럼 십진수로 변경되어 출력됨을 자주 보게 된다. 이것을 입력한 값 그대로 출력시켜 보자. 가장 간단하게 proc print에서 format문을 사용한다. 그러면 결과가 위의 그림 오른쪽 부분처럼 입력했던 값 그대로 출력됨을 볼 수가 있다. 왜 17자리를 하였는가? 어디까지 가능한지 몇번 실험을 해보았는데 포맷문의 숫자 변환은 17자리 1경까지만 정확하게 나오며, 경단위를 넘어갈시 기준이 불분명하며 잘못.. 2013. 12. 11.
[SAS] SAS를 이용해 데이터 중복제거하기 proc sql 사용 SAS데이터를 핸들링 하면서 가장 많이 하는 작업중 하나가 중복제거 작업입니다. 보통 가장 일반적으로 사용하는 것이 proc sort에서 nodupkey를 옵션으로 걸어서 사용을 많이합니다. 그렇다면 중복제거가 proc sort의 nodupkey만 있는 것이냐? 아니다! proc sql의 distinct문이 있다. 그런데 왜 두개가 따로 있는것인가? 뭐 따지고 보자면 중간의 정렬과정인 sorting작업이 sql에서는 해줄 필요가 없기때문에 sql문에 아마도 대용량 데이터에서는 더 빠른 처리 결과를 낼 것이다. 그럼 proc sql의 distinct를 이용하여 데이터의 중복제거를 하는 방법을 알아보자. 아래와 같이 중복이 있는 데이터 셋을 생성하였다. 위의 5개변수와 10개의 관측치를 가진 데이터를 이용하.. 2013. 11. 18.
[My Story] SAS와 커뮤니케이션 스킬 SAS에 대한 글을 작성 할 때 마다 항상 고민이 됩니다. 주어진 데이터에 대해 설명을 하고 거기에 대한 코딩 해석과 정보에 대해 전달을 하고 싶지만 이 모든 것을 그림과 텍스트를 통해서 전달하려니 이만 저만 어려운 것이 아닙니다. 업무를 진행하면서도 통계와 SAS에 대해 잘 모르는 사람과 일을 할 시에 상대가 요구하는 것이 무엇인지 정확하게 파악하는 것이 중요한데 상대도 SAS의 구조에 대해 잘 모르니 이렇게? 저렇게?해서 해달라고 요청을 하지만 중간에 말 한마디 전달이 잘못되면 작업을 다시 해야되는 경우가 많습니다. 그만큼 커뮤니케이션 스킬이 중요한 것 같습니다. 지금은 이 블로그도 시작단계이기 때문에 제가 전달하고자 하는 정보가 100% 전달되지는 않을 것입니다. 앞으로 지속적으로 발전하여 SAS,.. 2013. 11. 15.
[SAS] SAS를 이용해 joinkey별 동일한 code의 갯수를 비교후 많은 것들만 출력 SAS를 이용해서 조인키별로 동일한 code값을 많이 가진 값만 데이터를 출력하는 방법이다. 바로 앞에 게시했던 데이터를 이용하며, 연결되어 코딩을 실시하였다. http://statsbigdata.com/13 코딩은 위의 게시글과 연결된다고 보면 된다. 위와 같은 데이터와 조건을 가지고 출력결과와 같이 데이터를 생성해 보고자 한다. 코딩을 해보자. 저번 게시글의 코딩에서 연결된 것이다. 이번 게시글에 관련된 코딩은 주석으로 표시한 두번째 데이터셋 관련 코드이다. 당연히 실행하기 위해서는 연결된 것이니 코딩은 전체적으로 다 입력해야하겠죠?? 위의 사진과 같이 조인키별 코드가 많은 것에 대한 각각의 값들을 출력해 보았다. statsbigdata.com 김진휘 2013. 11. 15.
[SAS] SAS를 이용해 두개의 데이터 비교후 큰 값과 그에 따르는 값들을 함께 출력하기 SAS를 이용해 두개의 데이터 비교후 큰 값과 그에 따르는 값들을 함께 출력하기 값을 가지는 두개의 변수를 비교해서 큰값과 그에 따르는 다른 변수들을 함께 출력하는 방법입니다. 위와 같이 가격을 비교해서 높은 값을 가지는 가격에 대한 품명과 종류를 함께 출력해봅시다. c변수와 c1을 비교하여 높은 값을 가지는 것을 선택하고 그에 따른 a,b 또는 a1,b1을 가격과 함께 출력하는 것입니다. 두 값 비교해서 큰 값 또는 작은 값을 출력하고 싶을 때 응용하여 사용할 수 있습니다. 김진휘 2013. 11. 14.