본문 바로가기

SAS105

[SAS] sas에서 텍스트 파일 불러오기(infile문 이용, 에러 해결하기) 빅데이터(bigdata)를 다룰때 원시데이터가 엑셀(excel) 파일인 경우가 거의 없다. 이유는 엑셀 파일의 행(관측치)의 개수가 한계가 있기 때문이다. 엑셀 97-2003 통합문서인 경우 행은 총 65,536, 엑셀2007인 경우 행은 총 1,048,576 그렇기 때문에 텍스트 파일을 많이 가져오는 경우가 대부분이다. sas를 이용해서 텍스트 파일을 가져오는 방법을 알아보자. 일반적으로 간단하게 가져오는 경우가 [파일]-[데이터 가져오기] 를 통하여 또는 proc import를 이용하여 텍스트 파일을 가져오는데 정상적으로 가져와진다면 문제가 없다. 하지만 많은 경우가 불러오는 도중 다양한 에러들이 생기는 경우가 많다. 에러를 해결하는 몇몇의 경우에 대해서 알아보자. 1. [파일]-[데이터가져오기]를 .. 2014. 3. 5.
[SAS] sas merge 가로병합 끝장내기(full, left, right, inner join방법 소개) sas에서 데이터 핸들링을 하면서 데이터들을 붙이고 나누고 하는 작업들을 자주 하게 된다. 가장 많이 사용되는 것이 세로병합인 set 구문과 가로병합 merge인데 오늘은 merge 사용법에 대해서 알아보도록 하자. 사진을 보고 이해하면 아주 쉽게 이해 할 수 있을 것이다. 아래 사진에 m이라는 데이터셋과 m1이라는 데이터셋이 있는데 변수 key를 가지고 merge(가로병합)를 해보자. (아래사진참조) 1. 두 데이터를 조인시킬 변수를 proc sort를 통해 정렬한다. 예제에서는 key변수를 정렬한다.(아래사진참조) 2. full join merge 방법 (아래사진참조) 풀조인 말그대로 조건 없이 통째로 가로로 붙여버리는 거다. 3. left join merge 방법(아래사진참조) 한마디로 두개의 데이.. 2014. 3. 4.
[SAS] sas proc freq 간단한 빈도표 및 출력 방법 noprint sas에서 데이터들의 빈도를 보고 싶을 경우 proc freq를 많이 사용한다. 출력창으로 보지 않고 새로운 데이터를 생성하여 보고 싶은 경우가 있는데 간단한 구문인데도 불구하고 아무 생각없이 output out= 을 사용하여 출력이 되지 않는다고 질문하는 분들이 많다. 예제를 통해 간단하게 알아보자. 사진참고 위의 사진을 보면 kk라는 데이터 셋에 a라는 변수가 하나가 있고 데이터는 총 11개 이다. 이 kk데이터 a변수의 빈도를 구하는 방법이다. 출력창으로 출력하지 않고, 새로운 데이터셋에 결과를 기록하고 싶을 경우에 proc freq에서 noprint 옵션을 사용하여 출력창으로 출력되는 것을 방지하고, table 변수명 뒤에 슬러시 / 를 사용한 후 out=출력결과를 저장할 데이터 셋명을 입력하면 .. 2014. 3. 4.
[SAS] sas proc sql 문장에 대해서 알아보자(문장구조, 조건식) sas proc sql 문장에 대해서 알아보자(문장구조, 조건식) proc sql에서 조건식에 대해서 자세히 알아보자. [문장구조] proc sql; create table 결과데이터 셋 명 as select 그룹변수명, sum (case when 조건식 ~~일때 then 조건식 ~~해라 else 아니면 조건식 해라 end) as 예명 from 입력 데이터셋 명 where 조건식 group by 그룹변수명 having 결과 데이터에 대한 조건식; quit; run; [예시] [코딩 설명] sp3라는 데이터셋을 생성하여 month변수를 생성한다. sum함수를 이용하여 sum이라는 변수를 만들어 값을 구하는데 조건은 month가 01일 경우 cost에 10을 더하고 아니면 그냥 cost값으로 계산한다. sp.. 2014. 2. 28.
[SAS] sas proc sql 문장에 대해서 알아보자(문장구조, 기술통계량) sas에서 proc sql 문장을 이용해서 기술통계량을 구하는 방법을 알아보고, 문장구조에 대해서도 알아보자. [문장구조] proc sql; create table 결과 데이터셋명 as select 그룹변수명, sum(변수명) as sum, count(변수명) as n, avg(변수명) as mean, max(변수명) as max, min(변수명) as min, std(변수명) as std from 입력 데이터셋명 where 입력 데이터에 대한 조건식 group by 그룹변수명 having 결과 데이터 조건식; quit; run; [예제] [예제 및 코딩 설명] month, id, cost라는 변수 세개를 가진 sp1이라는 데이터셋이 있다. create table sp2 → sp2라는 결과 데이터 셋을 .. 2014. 2. 28.
[SAS] SAS PROC EXPORT를 이용하여 SAS파일을 텍스트파일로 내보내기 대부분 대용량 빅데이터를 다룰시에 엑셀로 내보내는 것보다 텍스트파일 형식으로 내보내는 것을 선호한다. SAS파일을 텍스트 파일 형식으로 내보내는 방법을 알아보자. 클릭클릭을 통해 간단하게 내보내는 방법이 있으나 여러개의 파일을 내보낼 경우에는 PROC EXPORT 구문을 이용하는 것이 훨씬 효율적이다. [코딩과정] PROC EXPORT DATA= work.ace OUTFILE= "C:\Documents and Settings\pc\바탕 화면\ace.txt" DBMS=TAB REPLACE; RUN; [설명] 임시라이브러리인 work방에 있는 ace라는 sas파일을 ace라는 텍스트 파일로 내보내는 경우이다. (work라이브러리는 임시 라이브러리이기 때문에 생략이 가능하나 설명을 위해 그냥 넣었다.) 전체적.. 2014. 2. 28.
[SAS] sas에서 기하평균과 신뢰구간 간단하게 구하는 방법 sas를 이용해서 값들의 기하평균과 신뢰구간을 간단하게 구하는 방법을 알아보자. 참고로 이 옵션은 sas9.1은 되지 않으며 9.2버전 이상만 가능하다. SAS EG도 가능하다. 위의 사진의 코딩처럼 proc ttest에서 옵션부분에 dist=lognormal 이라는 옵션을 사용하면 출력창에 geomean(기하평균값)과 그에 따른 95% 신뢰구간을 출력해 준다. sas 9.1버전에서는 빅데이터의 기하평균을 구하기 위해 로그를 씌우고, proc means해서 다시 exp를 씌우고 하는 작업을 해야는데 (물론 간단한 데이터의 경우에는 geomean() 함수로 해결이 가능함) 9.2 버전 이상부터는 dist=lognormal 옵션이 사용가능하기 때문에 간단한 코딩으로 기하평균과 신뢰구간을 구할 수가 있다. w.. 2014. 2. 27.
[SAS] sas에서 기하평균(geometric mean) 구하는 방법 sas에서 빅데이터(bigdata)의 이상치 제거를 할 경우 사분위수 q1, q3와 함께 자주 사용되는 기하평균(geometric mean)을 구하는 방법에 대해서 알아보자. 기하평균의 공식과 상세설명 참조 www.sasbigdata.com/81 1. 데이터셋 a는 2, 5, 7, 8 네개의 양수로 구성되어 있다. 2. 먼저 log_k라는 변수에 k값에 로그(log)를 씌워 치환한다. (이때 계산되어지는 값은 밑이 10인 상용로그(log)값이 아닌 밑이 e인 자연로그 ln값이다. ln=log e) 3. 로그로 치환된 log_k값들의 평균을 구한다. proc means를 이용 4. 마지막으로 log_mean(로그로 치환된 값들의 평균)에 지수 exp(exponential의 약자 자연대수 e)를 취한다. 5.. 2014. 2. 26.
[SAS] sas에서 numeric 숫자형 결측치(.)를 0으로 한번에 다 바꾸는 방법 데이터에서 정제된 데이터가 있으면 좋겠지만 정제되지 않은 데이터를 받는 경우가 대부분이다. 이럴 경우에 문제 중 하나가 결측치 처리 방법이다. sas에서는 숫자형 변수에 대해 결측치가 있을 경우 점(.)으로 표시되는데 이것을 모두 0으로 한번에 바꾸는 방법을 알아보자. [sas 코딩과 결과창] 위의 사진을 보면 결측치가 포함되어 있는 point라는 데이터셋이 있다. 아래 코딩을 보면 array(배열) 문과 do문 if문의 조합으로 간단하게 모든 변수(sas, bigdata, kim, jin, hwi)에 있는 결측치 . 들을 0으로 변환 시킬수가 있다. 결과창 참조 [sas 코딩] data point_0; set point; array ace[*] _numeric_; do i=1 to dim(ace); i.. 2014. 2. 24.
[SAS] sas retain문장을 이용해 원하는 변수부터 나열하는 방법 2014년 소치올림픽 김연아가 아쉽게 은메달을 땄다....말도 안돼... sas를 이용해 retain문장으로 원하는 변수별로 나열하는 방법을 알아보자. 사진을 보면 소치 2014데이터셋에 세개의 의미있는 변수가 있다. 각각 러 시 아 라는 데이터를 가지고 있으며, 이것을 아래와 같이 retain문장을 입력 한 뒤 원하는 변수 대로 입력(러, 시, 아 를 거꾸로 가져와봄)하면 결과와 같이 러시아가 거꾸로 변수별로 들고오니 아시러가 되었음을 알수 있다. www.sasbigdata.com 김진휘 2014. 2. 21.
[SAS] sas proc means를 이용해 그룹별 사분위수(q1, q3) 구하기. 이상치제거 응용가능 sas의 proc means를 이용하여 그룹별로 사분위수를 구하는 방법을 알아보자. 이 방법은 표본층화추출방법을 사용했거나 기타등 데이터에서 사분위수 이상치제거 작업전에 q1, q3를 구하는데 많이 사용되는 방법이다. 먼저 이작업의 유의점은 이전과는 달리 그룹별로 먼저 proc sort를 이용하여 정렬을 해주어야 한다. 그룹별로 정렬작업을 하고 그 뒤는 이전과 같이 사진 처럼 proc means를 이용해 q1과 q3를 구하면 된다. 대신 var cost - cost라는 연속형 변수에 대해 q1과 q3를 구하는데 우리는 이번에는 그룹별로 구할 것이므로 그전에 by group 라는 문구를 입력해준다. 그럼 사진의 맨 아래부분과 같이 그룹 a와 b별로 각각의 q1과 q3를 구할수 있다. _type_과 _fre.. 2014. 2. 21.
[SAS] sas proc means를 이용해 사분위수(q1, q3) 구하기. 이상치제거 응용가능 sas에서 많이 사용되는 proc means를 이용해서 사분위수인 q1과 q3를 구해보자. 특이 이 작업은 이상치제거작업시 가장 흔하게 사용되는 사분위수 제거방법을 사용할때 자주 응용되는 방법이다. 정확하게는 1사분위수(q1), 3사분위수(q3)를 구하는 방법이다. 코드과정은 간단하다. proc means에서 알고싶은 연속형 변수를 입력한다,(var cost부분처럼) 그다음 q1=q1(ace1생성시 1사분위수 데이터의 지정하고싶은 변수명 아무것이나 가능),q3도 같다. 4분위수 q1, q3를 이용해 이상치를 제거 할때 위 사진 처럼 작업하여 q1, q3를 구하여 작업을 많이 한다. www.sasbigdata.com 김진휘 2014. 2. 21.