🍄

5.2.1. 데이터 가공

목차

1. 데이터 생성

테이블 내부에 데이터를 입력하는 명령어 입니다. 입력된 데이터가 위치별로 일정하게 정렬 되어 있을 때 사용하면 유용한 명령어 입니다. datalines 대신 cards를 이용하여 작성하셔도 됩니다.

1.1 datalines

data mysas.data1; input name $10. age gender $; datalines; 홍길동 20 M 심청이 25 F ; run; proc print data=mysas.data1; run;
notion imagenotion image

1.2 cards

data mysas.data1; input name $10. age gender $; cards; 홍길동 20 M 심청이 25 F ; run; proc print data=mysas.data1; run;
datalines와 cards는 input문장 다음에 나오며, 명령문이 끝나면 마지막에 세미콜론(;)을 입력해줍니다.

2. LENGTH

변수의 길이를 지정해 주기 위해 사용합니다. 숫자 변수는 변수명만 입력하시면 되고 문자변수는 길이를 지정해주지 않으면 기본 8바이트로 설정 됩니다. 여기서 글자 수는 알파벳 기준입니다. 이보다 변수의 길이를 크게해주고 싶을 때 사용합니다. 쉽게 말해 변수의 길이를 지정해주는 것이며 input앞에 써줍니다.

2.1 문자 변수 길이 변경하기

테이블 생성과 같이 길이를 지정해주어서 만들 수 있습니다.
data mysas.test; length AGE $ 1 Name $ 12; input ID AGE $ Name $; run;
 
문자 변수는 변수명 뒤에 한 칸을 띄우고 $를 붙입니다. 변수의 포맷을 알파벳 12글자까지 받아들일 수 있도록 변경합니다.
한글 데이터의 경우 SAS프로그램에서 최소 2개의 기억공간을 차지합니다. 한글 한 글자는 영어 두 글자와 동일한 기억공간을 차지합니다. 따라서 한글 한글자를 변수에 입력하기 위해서는 적어도 2칸을 설정해 줘야 합니다.
 
💡
주의사항 : 꼭 input앞에 지정해주고 변수명뒤에 $표시를 붙여야 합니다. 숫자형 변수는 길이 지정을 할 수 없습니다.
 
외부파일 변수명, 변수길이 지정하면서 불러오는 코드입니다.
data 데이터셋; length id $ 3 name $ 10 gender $ 1; infile '외부파일경로' dlm='구분자'; input id name $ gender $; run;
 

2.2 입력 대상 데이터 위치 설정하기

INPUT 변수명1 $ 1-12 변수명2 14;
 
변수명 1은 1~12칸 문자변수, 변수명2는 14번째 칸 숫자변수를 의미합니다. 칸을 미리 지정하고 값을 넣는다고 생각하시면 됩니다.
 
1번에서 사용한 변수의 길이 설정과 2번에서의 길이 설정은 다른 점이 있습니다. 1번은 첫번째 변수의 길이를 지정하면 두번째 변수는 그 앞에 변수의 길이를 인식해 두번째 변수의 길이를 설정하는 반면, 2번째 길이 설정은 변수의 길이를 미리 시작점-종료점을 지정합니다. 이 방법의 단점은 앞에 변수의 개수를 세서 사용해야 합니다. 그렇기 때문에 잘 사용하지 않는 방법입니다.
 

2.3 숫자 변수 설정

만약 숫자 변수로 설정 되어 있는데 '가나다' 처럼 문자 변수가 입력될 경우 해당 데이터는 '.' 으로 표시가 됩니다. 공백(NULL값, 결측치)로 인식됩니다.
숫자 변수의 경우 한 글자당 한개의 위치를 차지하기 때문에 하나의 칸만 설정해도 무방합니다.
 
숫자 변수의 길이 지정은 input에서만 지정이 가능합니다.
INPUT 변수명 $12. 변수명 ;
 

3. label

변수의 칼럼 레이블을 지정합니다.
data mysas.data2; set mysas.data1; label gender='성별'; run; proc contents data=mysas.data2; run; proc print data=mysas.data2; run;
label의 길이는 공백을 포함하여 256자 까지 가능하며, 문장이 완전히 끝났을 때 세미콜론(;)를 입력해줍니다.
proc contents 부분은 데이터의 속성을 확인하는데 사용합니다.
 
실행결과 data2에서 아래처럼 보기를 컬럼 레이블로 변경해줍니다.
 
notion imagenotion image
notion imagenotion image
 
notion imagenotion image
 
칼럼 레이블이 gender 에서 성별로 바뀌신 것을 볼 수 있습니다.
 
notion imagenotion image
 
보기를 컬럼 이름으로 바꿔 주면 원래 변수명이 나오는 것을 볼 수 있습니다.
 

4. rename

변수의 이름을 변경할 수 있습니다.
data mysas.data3; set mysas.data2; rename gender=gender2; run; proc print data=mysas.data3; run;
 
notion imagenotion image
 
변수 gender가 gender2로 바뀐 것을 볼 수 있습니다.
 

5. keep

출력될 데이터 셋에 새로운 변수를 포함하어 출력합니다.
data mysas.data4; set mysas.data3; keep name gender; run; proc print data=mysas.data4; run;
notion imagenotion image
data mysas.data5; set mysas.data3(keep=name gender); run; proc print data=mysas.data4; run;
 
data mysas.data6(keep=name gender); set mysas.data3; run; proc print data=mysas.data5; run;
 
notion imagenotion image
 
모두 같은 출력결과가 나오는 것을 볼 수 있습니다.
여기서 주의해야 할 점은 KEEP명령어를 SET 단계에서 쓰는 것과 DATA 단계에서 쓰는 것은 엄연히 다르다는 것입니다.
SET단계에서 name, age, gender가 필요하고 name, gender만 필요하면, 모든 컬럼을 지정해주고 DATA단계에서 KEEP명령어로 name, gender만 지정해주면 됩니다.
하지만 처음부터 SET에서 칼럼 name, gender만 필요하다면 SET단계에서 KEEP명령어로 칼럼 name, gender만 지정해주면 됩니다.
 

6. drop

출력할 데이터 셋에서 변수를 제거하여 출력할 수 있습니다. 데이터에 해당되는 것(불필요한 변수-우리가 지정한 데이터)를 제외하고 불러옵니다.
 
data 새로운 데이터셋; set 기존 데이터셋; drop 변수명 변수명; run;
 
data 새로운 데이터셋; set 기존 데이터셋(drop=변수명 변수명); run;
 
data 새로운 데이터셋(drop=변수명 변수명); set 기존 데이터셋; run;
 
DROP에서도 모두 같은 결과를 출력할 수 있습니다.
여기에서도 SET 단계에서 쓰는 것과 DATA 단계에서 쓰는 것은 엄연히 다릅니다.
 
notion imagenotion image