본문 바로가기

SAS105

[SAS] sas에서 그룹(key)별로 특정값들의 조합이 있는 경우의 그룹만 추출하는 방법 sas에서 그룹(key)별로 특정값들이 조건에 따라 존재하는 경우의 그룹(key)만 추출하는 방법에 대해서 알아보자. 아래 그림을 통해서 어떤 경우(조건)들의 추출하는지에 대해서 알아보자. 위의 왼쪽이 샘플데이터이다. key(그룹)별로 code값에 조건의 값들이 있는 경우를 출력하는 것이다. 조건은 key별로 A, B, C가 존재하는 경우, A와 C가 존재하는 경우, B와 C가 존재하는 경우의 key값만 출력한다. key별로 A와 B조합만 있는 경우는 출력하지 않는다. key값 1인 경우는 code에 A,B,C가 있으므로 출력 key값 2인 경우 10인 경우는 code에 A,C가 있으므로 출력 key값 3인 경우는 code에 B,C가 있으므로 출력 key값 4인 경우는 A, B의 조합이므로 출력하지 않는.. 2014. 5. 26.
[SAS] sas에서 코딩방법에 따른 처리 속도의 차이(if문의 위치) sas로 빅데이터를 핸들링하면서 항상 답답하고 문제되는것이 처리속도 시간이다. 큰데이터를 다룰수록 속도와의 전쟁인데, 각자 자기만의 스타일로 다양하게 프로그래밍하지만 코딩을 가장 최적화 시키면, 데이터가 크면 클수록 처리속도 시간의 차이는 엄청나다. 아래의 간단한 예를 보고 data step에서 if문 코딩을 최적화하는 방법을 알아보도록 하자. 위의 두개의 데이터셋 생성의 조건은 다음과 같다. test 데이터셋의 department변수에서 기획부값만 가져오고 각각 사칙연산의 결과를 나타내는 변수를 생성하라. 위의 결과 처럼 코딩의 순서는 다르지만 결과는 같다. 하지만 만약 이 데이터가 예제와 달리 방대한 양의 데이터라면 이 두가지의 코딩 처리속도는 분명히 차이가 난다. 왼쪽의 코딩은 if문이 먼저 나타나.. 2014. 5. 16.
[SAS] sas에서 그룹별로 여러변수에 특정값이 포함하는 key값만 출력[sql문사용] sas에서 그룹별로 여러변수에 특정값이 포함하는 key값만 출력하는 방법을 알아보자. 이전에도 비슷한 작업을 하였는데 이번에는 sql문을 이용해 아주 간단하게 처리하는 방법에 대해서 알아본다. 아래의 그림을 참조하자. 기존의 데이터에서 key그룹별로 code1과 code2에 특정값 a가 있는 경우의 키값들이 몇개인지 알아보는 방법이다. [코딩과정] data test; input key$ code1$ code2$@@; cards; 111 a b 777 g g 777 t t 111 b b 111 b a 222 a b 222 a b 333 b b 555 a a 333 b a 333 b b 666 a a 444 a b 444 b a 666 b a 666 a b ; run; proc sql; create tabl.. 2014. 5. 15.
[SAS] sas에서 그룹별로 여러변수에 특정값이 공통으로 존재하는 경우 그룹수 추출방법 sas에서 그룹별로 여러 변수에 특정값이 공통으로 존재하는 경우 그룹 수를 추출하는 방법을 알아보자. 예를 들어 보면 아래의 그림처럼 code1과 code2에 a라는 특정값이 그룹별로 모두 존재하는 경우에 해당하는 그룹이 몇개인지 알아보는 방법이다. 위의 그림은 예를 들어 설명한 것이고, 실제 사용한 예제데이터는 다른 데이터이지만 형식은 같다. [코딩과정] /*예제데이터 생성*/ data h; input key$ code1$ code2$; cards; 111 a b 111 b b 111 b a 111 a a 222 a b 222 a b 333 b b 222 b b 333 b b 333 b a 333 b b 444 a b 444 b a 555 a b 555 a b 666 a a ; run; /*code1이.. 2014. 5. 14.
[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에서 그룹별로 순서대로 번호 매기는 방법 sas에서 그룹별(중복값들에 대해)로 각 순서를 매기는 방법에 대하여 알아보자. 예를 들어 설명하면 1이라는 값이 3개가 있으면 새로운 변수를 생성해 1이라는 값 옆에 1부터 3까지 생성하는 것이다. [코딩] /*예제데이터 a 생성*/ data a; input jin@@; cards; 1 1 1 2 2 2 2 2 3 3 ; run; /*예제데이터는 데이터가 순서대로이지만 원래는 proc sort를 그룹이 되는 변수별로 실시해줘야됨*/ proc sort data=a; by jin; run; /*새로운 변수를 생성, 그룹별로 1부터 누적값을 만들어줌*/ data b; set a; by jin; if first.jin=1 then n_jin=0; n_jin+1; run; [결과] 위와 같이 코딩을 실행하면 아.. 2014. 5. 13.
[SAS] sas에서 두개의 데이터셋 left join후 우측데이터 부분 모두 제거방법 sas에서 두개의 데이터셋 left join후 우측데이터 부분 모두 제거하는 방법을 알아보자. 글로써는 잘 이해가 되지 않으므로 아래의 그림을 통해 어떻게 조인할 것인지 확인하자. 위 그림처럼 hwi1 데이터셋과 hwi2 데이터셋을 left join을 하는데 hwi2에 해당하는 데이터셋은 제거하고 hwi1의 데이터만 추출하는 것이다. 그림처럼 hwi1과 hwi2의 공통되는 부분또한 hwi2에도 포함되므로 제거가 된다. hwi1의 단독데이터만 추출한다고 보면 될 것 같다. data step구문과 sql구문 두가지 방법을 사용해서 코딩을 해보자. 아래의 코딩 사진 처럼 data step과 sql코딩을 따라가면 우리가 원하는 결과를 추출할 수가 있다. 당연히 구문만 다를 뿐 결과는 같은 결과를 추출한다. [코.. 2014. 5. 12.
[SAS] sas에서 그룹별로 특정값이 있는 경우 체크하는 방법 sas에서 그룹별로 특정값이 있는 경우를 체크하는 방법을 알아보자. 아래의 예제를 통해 알아보면 key변수를 중복값이 있는 그룹이라고 보면 key값 별로 code에 a라는 값이 있는 경우를 찾는 것이다. [코딩 과정 설명] /* 샘플데이터 생성 작업*/ data test; input key$ code$; cards; 111 a 333 s 222 s 111 a 111 s 222 s 333 s 444 a 222 s ; run; /*code에 a값만 추출한 뒤. check라는 변수를 생성해 Y라는 값을 주고 code값은 드랍시킨다.*/ data test2(drop=code); set test; if code='a'; check='Y'; run; /*위에서 추출한 데이터의 key값들의 중복값을 제거 한다.*/ .. 2014. 5. 9.
[SAS] sas에서 left join 왼쪽데이터셋 기준 가로병합하는 방법(교집합되는 부분가져오는 경우) sas에서 left join 왼쪽데이터셋 기준으로 가로병합하는 방법을 알아보자. 이경우는 공통된 교집합 부분을 포함하는 left join방법이다. 아래그림 참조 위의 그래프 그림과 같이 가로병합을 하되 hwi1(왼쪽데이터셋)기준으로 가로결합을 하며 공통된 부분은 같이 따라오게 하는 방법이다. 1. data step 먼저 sort과정을 거쳐 merge를 하는 data step에서 하는 방법을 알아보자. 가로 병합할 두개의 데이터셋의 키값(key)을 proc sort를 통해 정렬을 한다. 그리고 in이라는 데이터셋 옵션을 사용해서 if를 함께 이용해 in옵션에 임의의 변수명인 haha기준으로 merge를 하는 것이다. 아래 스크린샷 참조 2. proc sql 위와 같은 결과를 출력하는데 sort과정이 필요없.. 2014. 4. 29.
[SAS] sas에서 full join(합집합)에서 inner join(교집합)부분 빼는 방법(합집합-교집합) sas를 이용해 merge를 하는데 조건이 두개의 데이터셋 합집합 개념에서 교집합 부분을 빼는 방법을 알아보자. 아래의 그림을 보면 이해가 쉬울 것이다. 한마디로 hwi1 데이터셋과 hwi2 데이터셋의 초록색 부분을 추출해 내는 것이다. 1. DATA STEP 먼저 기본적인 데이터스텝에서 해보자. 두개의 데이터셋에서 기준이 되는 변수를 각각 proc sort를 이용해 정렬을 한다. 그뒤 아래의 그림에 코딩과정 처럼 진행하면 추출이 가능한데 if문에 있는 =^은 같지 않다라는 뜻이다. =^ 자리에 ne를 써도 같은 의미이다. ne는 not equal의 줄임말이다. 2. proc sql 위와 같은 결과값을 추출하지만 sort과정이 필요없기때문에 처리 속도가 빠른 sql문을 이용해 추출해보자. 아래 그림을 참.. 2014. 4. 25.
[SAS] sas에서 full join 하기 (합집합 개념) sas에서 두개의 데이터셋을 full join하는 방법에 대해서 알아보자.(합집합 개념) 합집합에서는 좌 우측 데이터들의 일치 유무를 따지지 않고 모두 붙이는 개념인데 합치는 과정중 공백이 있다면 null값으로 처리한다. 위의 그림처럼 hwi1이라는 데이터 셋과 hwi2 데이터 셋의 합집합개념(초록색 부분)이라고 보면 된다. 1. data step 위의 사진은 data step을 사용하는 방법이다. proc sort과정을 하여 단순하게 merge시키면 위와 같이 원하는 합집합 개념의 결과가 도출된다. 2. proc sql(full join 사용) proc sql에서 full join명령어를 사용하는 방법이다. 자세히 보면 key변수의 555값이 없는 것을 볼 수 있다. 이것은 full join이 될때 기.. 2014. 4. 16.
[SAS] sas에서 inner join 하기 (교집합 개념) SAS에서 두개의 데이터셋을 합치는데 공통된 부분을 가로결합하는 방법을 알아보자. 쉽게 말하면 아래의 그림과 같이 초록색 부분인 교집합 부분을 출력하는 것이다. 위의 사진은 예제 데이터인 hwi1데이터셋과 hwi2데이터셋의 교집합 부분(초록색)을 출력하겠다는 그림이다. 1. data step 빅데이터에서는 proc sort과정의 처리속도 문제로 sql을 많이 사용하지만 일반적으로 많이 사용하는 데이터스텝에서 inner join(교집합)을 하는 과정을 알아보자. key값이 같은 데이터를 출력한다. join할 2개의 데이터셋의 기준이 되는 변수 key변수를 먼저 proc sort로 정렬을 한뒤 merge(가로병합)를 한다. 조건은 key기준으로 in의 a와 b가 같은 경우 교집한인 경우를 설정하면 위와 같이.. 2014. 4. 16.