본문 바로가기

SAS106

[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에서 그룹별로 각각 두 개 이상 변수에 특정값이 포함된 경우 추출하는 방법 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에서 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 하기 (합집합 개념) 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.
[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에서 문자형(character)를 수치형(numeric)으로 변환방법(수치형을 문자형으로도 포함) sas에서 변수속성을 바꾸는 방법을 알아보자. 숫자형(numeric)변수를 문자형(character)변수로 변환하는 방법과 반대로 문자형(character)변수를 숫자형(numeric)변수로 변환하는 방법을 간단하게 예를 통해 알아보도록 한다. 임의로 생성한 test 예제 데이터이다. 아래사진참조 base라는 데이터셋에는 10자리 문자형 변수인 ace라는 변수가 있다. 위의 문자형 변수인 ace변수의 데이터를 numeric이라는 수치형변수로 생성하는 것이다. numeric=input(ace,10.)은 문자형변수 ace의 속성을 바꿔 numeric이라는 수치형변수로 생성을 하는데 ace변수의 관측값의 10자리까지 가져오겠다는 것이다. 즉, 10.이 아닌 7.을 사용할 경우 1234567까지 7자리만 가져오.. 2014. 4. 9.
[SAS] sas에서 데이터셋에 조건에 맞는 값들을 뽑아내 각각의 데이터셋으로 저장하는 방법 sas에서 데이터셋안의 조건에 맞는 값들을 각각 뽑아내서 따로따로 각각의 데이터셋으로 저장하는 방법을 알아보자. [사진참조] 위의 코딩을 보면 total에는 num과 cost 두개의 변수를 가진 총 4개의 관측치가 있다. 코딩 설명 data a b; 데이터셋 a와 b를 생성해라. set total; 데이터셋 total을 가져와라. if num='aaa' then output a; 만약 num값이 aaa이면 a데이터셋으로 보내라. else if num='bbb' or num='ccc' then output b; 만약 num값이 bbb이거나 ccc이면 b 데이터셋으로 보내라. run; 실행해. 위의 결과창을 보면 a와 b라는 데이터셋이 생기면서 각각 조건에 맞는 값들이 저장된 것을 확인 할 수가 있다. sa.. 2014. 4. 7.
[SAS] sas 문자형(Character) 변수 숫자형(Numeric) 변수로 바꾸기, 숫자형을 문자형으로 바꾸는 방법 sas에서 변수가 문자형(Character)인 경우 숫자형(Numeric)으로 바꾸는 방법과 그 반대 방법인 숫자형인 경우 문자형으로 변수속성을 바꾸는 방법을 알아보자. 아래 사진 참조 위의 사진을 보면 k라는 변수는 수치형(Numeric) 데이터이다. 이 데이터의 속성을 문자형(Character)으로 바꾸는 방법을 알아보자. 코딩 해설 length 를 이용해서 k1이란 변수를 만들어 문자형 20자리라고 길이와 속성을 지정한다. k1 = put ( k , 8.) 은 8자리 길이를 가진 수치형 변수 k를 k1으로 내보낸다. 코딩이랑 해설을 천천히 보면서 실행해보시면 이해가 되실겁니다. 결과창을 보면 k와 k1은 값은 같지만 속성을 보면 k1은 수치형이 아닌 문자형 20자리로 되어있는 것을 알수 있음. 위의.. 2014. 4. 4.
[SAS] sas proc univariate 로 히스토그램 그리기(percent) sas에서 proc univariate 간단하게 히스토그램을 그리는 방법을 알아보자. 데이터는 아래와 같다. proc univariate를 이용해서 위 데이터로 히스토 그램을 그리는 방법이다. endpoints 옵션을 설명하면 그래프에서 X축의 범위를 지정해주는 것이다. 위의 코딩을 예로 들면 그래프 X축을 -120부터 120까지 10단위로 그리겠다는 뜻이다. vaxis는 세로축 범위를 지정하는 것인데 0부터 30까지 1단위로 그린다는 뜻이다. 사진이 흐릿하여 잘 보이지 않겠지만 위의 코딩을 실행하면 위 그림과 같이 히스토그램이 그려진다. x축과 y축이 지정한 범위대로 출력되었으며 출력범위를 지정하지 않을 경우 sas가 데이터에 맞게 임의로 설정한다. 주의할 점은 y축이 나타내는것이 빈도가 아닌 전체의 .. 2014. 4. 3.
[SAS] sas에서 그룹안에 특정값이 함께 있는 경우와 없는 경우 건수 알아내는 방법 sas에서 그룹에 속한 데이터들 중에 특정값이 포함되있는 경우와 없는 경우의 건수를 알아내는 방법을 알아보자. 이 과정을 참 언어로 풀어내기가 어렵기 때문에 천천히 문제를 이해하고 과정을 알아본다. 아래의 사진을 참조하자. 알고싶은 것은 group별로 name의 관측값들중에 AQ로 시작하는 데이터값이 포함 되어 있는 경우와 아닌 경우가 그룹단위로 몇건인지를 알고 싶은 것이다. 결과 값과 비교해보면 c1인 경우 HD1은 AQ1과 같은 그룹에 속해있으므로 1건이 카운트 된다. 하지만 key변수 444에서 c1에서는 AQ1이 없으므로 아닌 경우도 1건이 카운트 되는 것이다. 이와 같이 HD2 또한 마찬가지로 카운트가 된다. HD3인 경우에는 key변수 111의 c1그룹에는 아예 값이 없으며, key변수 444.. 2014. 4. 2.
[SAS] sas에서 그룹별로 속하는 값 가로로 나열하는 방법(proc sort, proc transpose) sas를 이용하여 각 그룹별로 그룹에 속해있는 값들을 가로로 치환? 나열하는 방법을 알아보자. 데이터의 크기가 작은 경우에는 엑셀로 하는 것이 빠르지만 빅데이터(bigdata) 시대에 대용량 데이터에서 엑셀로 작업을 하는 것은 거의 불가능에 가깝다. sas를 사용해 간단하게 예제를 통해 알아보자. 위의 사진을 참고하자. 1. ace라는 데이터셋이 있다. 2. 그룹별로 어떤 데이터가 있는지를 먼저 알기 위해 proc sort를 통해 정렬을 한다. 사진의 왼쪽 하단처럼 데이터가 group별로 code값이 정렬이 된다. 3. 그럼 이 코드들을 우측으로 촤악~ 나열을 해야한다. 이때 사용되는 구문이 proc transpose이다. proc transpose 상세 내용은 아래의 주소를 클릭. http://sasb.. 2014. 3. 31.