테이블 내부에 데이터를 입력하는 명령어입니다. 입력된 데이터가 위치별로 일정하게 정렬되어 있을 때 사용하면 유용한 명령어 입니다. datalines 나 cards를 이용하여 작성하셔도 됩니다.
실습을 위한 데이터 설정
data work.info;
input id name $10. gender $ age height weight PT price;
datalines;
1901 강지우 W 20 160 60 1 250
1902 김도윤 M 21 175 80 1 230
1903 현수아 W 20 157 55 0 120
2001 도서아 W 22 164 68 0 150
2002 김준우 M 24 169 70 0 180
1904 오현주 W 21 161 56 1 240
1905 방지희 W 20 151 53 1 260
1906 송나라 W 20 169 55 1 250
2003 도경인 M 23 189 72 1 250
2005 마지희 W 24 169 64 0 100
;
run;
proc print data = work.info;
run;
data work.data1_1;
input name $10. age gender $;
cards;
홍길동 20 M
심청이 25 F
;
run;
proc print data = work.data1_1;
run;
datalines와 cards는 input 문장 다음에 나오며 명령문이 끝나면 마지막에 세미콜론(;)을 입력해줍니다.
변수의 길이를 지정해 주기 위해 사용합니다. 숫자 변수는 변수명만 입력하시면 되고 문자 변수는 길이를 지지어해주지 않으면 기본 8바이트로 설정 됩니다. 여기서 글자 수는 알파벳 기준입니다. 이보다 변수의 길이를 크게 해주고 싶을 때 사용합니다. 쉽게 말해 변수의 길이를 지정해 주는 것이며 input앞에 써줍니다.
-1) 문자 변수 길이 변경하기
테이블 생성과 같이 길이를 지정해주면서 만들 수 있습니다.
data work.test;
length age $1 name $12;
input id age $ name $;
run;
문자 변수는 변수명 뒤에 한 칸을 띄우고 $를 붙입니다.
변수의 포맷을 알파벳 12글자까지 받아들일 수 있도록 변경합니다.
한글 데이터의 경우 SAS프로그램에서 최소 2개의 기억공간을 차지합니다. 한글 한 글자는 영어 두 글자와 동일한 기억공간을 차지합니다. 따라서 한글 한글자를 변수에 입력하기 위해서는 적어도 2칸을 설정해줘야 합니다.
length 는 input앞에 지정해주고 변수명 뒤에 $ 표시를 붙여야 합니다. 숫자형 변수는 길이 지정을 할 수 없습니다.
-2) 입력 대상 데이터 위치 설정하기
input 변수명1 $ 1-12 변수명2 14;
변수명1은 1~12칸 문자변수, 변수명2는 14번째 칸 숫자변수를 의미합니다. 칸을 미리 지정하고 값을 넣는다고 생각하시면 됩니다.
-1)번에서 사용한 변수의 길이 설정과 -2)에서 길이 설정은 다른 점이 있습니다. 1번은 첫 번째 변수의 길이를 지정하면 두번째 변수는 그 앞에 변수의 길이를 인식해 두 번째 변수의 길이를 설정하는 반면 2번째 길이 실정은 변수의 길이를 미리 '시작점-종료점'을 지정합니다. 이 방법의 단점은 앞에 변수의 개수를 세서 사용해야 합니다. 그렇기 때문에 잘 사용하지 않는 방법입니다.
-3) 숫자 변수 설정
만약 숫자 변수로 설정 되어 있는데 '가나다'처럼 문자변수가 입력될 경우 해당 데이터는 '.'로 표시가 됩니다. 공백(NULL)로 입력됩니다.. 숫자 변수의 경우 한 글자당 한 개의 위치를 차지하기 때문에 하나의 칸만 설정해도 무방합니다.
숫자 변수의 길이 지정은 input에서만 지정이 가능합니다.
input 변수명 $12. 변수명;
변수의 칼럼 레이블을 지정합니다.
label의 길이는 공백을 포함하여 256자까지 가능하며, 문장이 완전히 끝났을 때 세미콜론 ';'을 입력해줍니다. proc contents 부분은 데이터 속성을 확인하는데 사용합니다.
data work.data2;
set work.data1;
label gender = '성별';
run;
proc contents data = work.data2;
run;
proc print data = work.data2;
run;
[ 칼럼 이름 ]
[ 칼럼 레이블 ]
칼럼 레이블을 보시면 gender에서 성별로 바뀐 것을 볼 수 있습니다.
출력할 데이터 셋에서 변수를 제거하여 출력할 수 있습니다.
데이터에 해당되는 것 (불필요한 변수)를 제외하고 불러옵니다.
-1)
data 새로운 데이터셋;
set 기존 데이터셋;
drop 변수명 변수명;
run;
-2)
data 새로운 데이터셋;
set 기존 데이터셋 (drop = 변수명 변수명);
run;
-3)
data 새로운 데이터셋 (drop = 변수명 변수명);
set 기존 데이터셋;
run;
drop에서도 모두 같은 결과를 출력할 수 있습니다.
실습을 위한 데이터 설정
data work.subject_test1;
input id name $9. class_ $ subject $ score;
datalines;
101 이호준 1반 computer 92
102 이호중 1반 computer 80
201 이길동 2반 computer 90
202 이준호 2반 computer 86
;
run;
-1) WHERE
SQL구문의 WHERE구문과 같습니다. 조건에 맞는 데이터를 출력할 수 있습니다.
work.subject_test1 table에서 score값이 90이상인 값만 출력하려고 합니다.
data work.subject_test2;
set work.subject_test1;
where score >= 90;
run;
proc print data = work.subject_test2;
run;
조건을 지정해 줄 때 'and/or' 등을 이용해 조건을 작성할 수 있습니다.
score값이 90이상인 값과 class가 1반인 조건을 'and'로 추가하였습니다.
data work.subject_test2;
set work.subject_test1;
where score >= 90 and class_ = '1반';
run;
proc print data = work.subject_test2;
run;
and구문을 or로 바꿨습니다.
score값이 90이상인 값이나 class_가 1반인 값을 조회했습니다.
data work.subject_test2;
set work.subject_test1;
where score >= 90 or class_ = '1반';
run;
proc print data = work.subject_test2;
run;
-2) LIKE문
조건문 안에서 해당 값을 포함하는 데이터를 추출할 수 있습니다. SQL에서 와일드카드와 같은 의미로 사용됩니다.
name변수에서 '이호'로 시작하는 데이터를 출력합니다.
data work.subject_test2;
set work.subject_test1;
where name like '이호%';
run;
proc print data = work.subject_test1;
run;
'_(언더바)'는 한자리 임의의 문자를 나타내고 %는 빈자리를 포함한 여러 임의의 자리를 나타냅니다.
위에 소스와 같이 '홍%'으로 지장하면 name 컬럼 중 첫 번째 글자가 홍으로 시작하는 값들을 출력해 줍니다.
만약 '이호준'을 언더바로 찾아내고 싶다면 '_호_'로 선택하거나 '__준'으로 선택해야 합니다.
-3) CONTAINS
조건문 안에서 해당 값을 포함하는 데이터를 추출하는 방법으로 contains를 사용합니다.
name값 중 '호'가 들어 있는 데이터를 추출합니다.
data work.contains;
set work.subject_test1;
where name contains '호';
run;
proc print data = work.contains;
run;
Save $250 on SAS Innovate and get a free advance copy of the new SAS For Dummies book! Use the code "SASforDummies" to register. Don't miss out, May 6-9, in Orlando, Florida.