PROC SQL Tutorial 3 - where clause, having clause
<두 개의 테이블의 결과로부터 테이블을 생성하는 법>
proc sql;
create table work.miles as
select salcomps.empid, lastname, newsals.salary, newsalary
from sasuser.salcomps, sasuser.newsals
where salcomps.empid=newsals.empid
order by 2;
quit;
위의 예제를 해석하면 다음과 같음
sasuser.salcomps와 sasuser.newsals 두 개의 데이터셋에서 데이터를 불러와 카르테시안 곱의 데이터셋을 만들고, 그중 salcomps데이터셋에 empid 변수와 newsals 데이터셋에 empid 변수가 같은 것만을 남긴다. 그 이후에 empid는 salcomps 데이터셋에서 불러오고, lastname은 하나의 변수에만 있기 때문에 냅두고, newsals 데이터셋에서 salary 변수를 불러오고, newsalary 도 불러온다. 마지막으로 정렬은 select 절에서 지정된 변수들 중 2번째 변수인 lastname을 기준으로 정렬한다.
create table 데이터셋명 as 문법은 실제로 테이블을 생성해준다. 출력결과는 반환하지 않는다.
from 절에서 . 앞에 sasuser는 라이브러리 네임이지만, select 절에서 salcomps.empid 에서의 salcomps 는 from 절의 데이터셋 네임임
order by 절에서 숫자로, select 절의 변수를 참조할 수도 있고, 변수 이름을 그냥 써서 할 수도 있고, 그 두 가지를 섞어서 할 수도 있음 숫자로 쓰는 이유는 변수 이름을 지정하지 않을 수도 있기 때문임
proc sql;
select substr(jobcode,1,2) , count
from sasuser.payrollmaster
group by 1;
위와 같은 경우에 씀
proc sql에서는 run 스테이트먼트를 쓰지 않음
마지막 절만 빼고, 절과 절 사이에는 세미콜론을 찍지 않음
여러 개의 테이블을 병합하는 경우에는 where 절에서 값이 맞는지를 확인해야함
proc sql을 나갈 때는 quit; 스테이트먼트를 꼭 써줘야함
select 절에서 *를 쓰면 모든 변수를 가져옴
출력하는 관찰치의 수를 제한하고 싶으면 outobs 옵션을 줌
중복되는 관찰치를 없애고 싶다면, select 절에서 distinct 옵션을 줌
select 절에서 계산한 변수를 where 절에서 쓰고 싶은 경우 calculated 옵션을 주어야함
예를 들어, proc sql;
select flightnumber, date, destination, boarded + transferred + nonrevenue as total
from sasuser.marchflights
where calculated total < 100;
quit;
위와 같이, select 절에서 계산한 변수 total을 where 절에서 쓰려면, calculated옵션을 줌
where 절에서는 다른 프로시져에서 쓰는 연산자들을 다 쓸 수 있음
select 절에서 summary variable을 만들 때 변수를 하나만 쓰면, 그 변수에 해당하는 모든 행에서 찾고, 여러개의 변수를 쓰면, 각 행에서 모든 변수에 대해 계산을 함
having 절은 where 절과 비슷하지만, having 절은 group by와 함께 써야함
각 그룹에 영향을 미치고, where은 각 개별 관찰치에 영향을 줌