2011/07/27
최근 R package가 통계 분석에 많이 사용된다고는 하지만, 기업에서는 SAS나 SPSS를 더 많이 사용하는 것으로 알고 있습니다. 저도 대학이나 연구기관의 의뢰에는 R를 사용하지만, 기업의 데이터 분석에는 SAS를 이용합니다.
간혹 클라이언트로부터 받은 데이터가 SAS의 영구 파일형식인 sas7bdat일 때가 있습니다. 분석할 때 아무래도 손에 익은 R을 선호하게 되는데 SAS를 사용할 수 있는 환경에 있으면 데이터를 일반 ASCII 파일로 변환하여 사용하면 되지만 SAS를 사용할 수 없는 환경에 있을 때도 있습니다.
물론 R에서 SAS 형식의 데이터를 불러오는 함수 read.ssd()가 있긴 하지만, 이도 시스템에 SAS가 설치되어 있어야만 이용할 수 있어서 이래저래 불편했었습니다. 그런데 최근 sas7bdat라는 패키지가 공개되어 간단하게 이 형식의 데이터를 R에 불러올 수 있게 되었습니다.
계속 읽기 »
2008/08/8
Q. 다음과 같은 데이터셋이 존재한다고 했을 때, 문자열변수 안의 숫자의 크기순으로 정렬하고 싶지만, 이대로 PROC SORT를 이용하면 A-1, A-10, A-12, A-2의 순으로 정렬됩니다. 문자열 안의 숫자의 크기 순으로 정렬하는 방법은 없나요?

A. 정렬을 하기 전에 id 변수의 숫자의 앞에 0을 추가할 필요가 있습니다. 0을 추가하려면 다음과 같은 과정이 필요합니다.
- scan 함수를 이용하여 변수를 “-” 문자를 기준으로 분리
- Zw.d 포맷을 이용하여 수치 문자열의 앞에 0을 추가
- CATX함수를 이용하여 전후의 공백을 없애고 분할할 문자열을 연결
예)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| DATA test;
INPUT id $ age $ @@;
DATALINES;
A-1 10 A-2 15 A-3 9 A-5 5
A-8 6 A-9 3 A-10 12 A-12 7
B-3 9 B-5 3 B-8 4 B-9 6
B-11 7 B-15 10
;
DATA test2;
FORMAT id3 age;
SET test;
ID1 = SCAN(id,1,'-');
ID2 = PUT(INPUT(SCAN(id, 2, '-'),best.),Z2.);
ID3 = CATX('-', id1, id2); RUN;
PROC SORT DATA=test2(KEEP = id3 age);
BY id3;
RUN; |
2008/08/7
Q. 복수의 문자변수 값을 컴마(,)로 연결해 하나의 변수로 만드는 방법은?
A. SAS 9 부터 추가된 CATX 함수를 이용하면 구분문자를 지정하여 문자열로 만들 수 있습니다.
1
2
3
4
5
6
7
8
9
10
| DATA _NULL_;
dlm=",";
char1="Hong";
char2="GilDong";
char3="15";
char4="A";
results=CATX(dlm, OF char1-char4);
PUT results;
RUN; |
출력결과 : Hong,GilDong,15,A