Data Analysis/SAS EG 11

[SAS] compress 공백 제거 함수

compress(변수[, 문자 표현식] [, modifier]) 데이터에서 숫자 또는 문자만 추출, 압축하는 기능 또는 원하는 문자만 삭제하거나 수정할 수 있다. (modifier에서 설정) 문자형 타입의 변수를 반환한다. 숫자형에서 compress()를 사용하려면, input()을 추가로 사용해줘야한다. /* source 변수 안의 숫자를 전부 제거 */ compress(source, "1234567890"); compress(source, '', "d");/* 수정자modifier "d"는 모든 숫자를 의미 */ /* source 변수 안의 null이나 잘못된 인자(길이가 0인 string)을 제거 */ compress(source, null); compress(source, ''); /* 공백을 제..

[SAS] array 배열, dim 함수

array 배열명[원소의 개수]; []대신 (), {}를 사용하기도 한다. 배열 안의 원소들은 모두 8byte의 길이를 갖는다. 특정한 길이를 선언하고 싶으면 배열 뒤에 한 칸을 띄우고 숫자를 적어줄 것 (문자형 배열의 경우 $뒤에) DIM(배열명) : 배열안의 원소의 개수를 출력 /* rev1, rev2, ...., rev12까지 12개의 원소를 갖는 revenue 배열을 선언 */ array revenue[12] rev1-rev12; /* 문자형 배열 char선언, 배열 안에 들어갈 원소의 개수는 정하지 않음 */ array char[*] _character_; do i=1 to dim(char); char[i] = input(char[i], comma20.); end;

[SAS] varnum 함수

VARNUM( 데이터셋ID, 변수명) SAS 데이터셋에서 변수의 위치 번호를 반환하거나 또는 해당 변수가 존재하지 않는 경우에는 0을 반환한다. 데이터셋 ID : OPEN 함수가 반환하는 데이터 집합 식별자를 지정 【사용법 ①】 PROC CONTENTS 의 옵션으로 사용 → 옵션으로 지정시 변수를 작성순으로 표시 (따로 표시 안해주면 디폴트 값으로 알파벳순으로 정렬됨) 【사용법 ②】 OPEN함수와 함께 사용해서 데이터 셋에 변수가 존재하는지 확인 + 매크로 변수에 해당 위치번호를 넣어서 다음 연산에 활용 /* 데이터셋 bspl 안의 변수들의 번호들을 출력 */ proc contents data=bspl varnum; /* sashelp.class안에 height라는 변수가 존재하는지 확인 */ DATA ..

[SAS] PROC IMPORT 데이터 불러오기

/* SAS에서 다수의 물리파일을 읽어들일 때 macro를 많이 사용한다. %macro 매크로명(불러올 파일명, 출력할 데이터셋명) proc import ... run; ... %mend; */ %macro import(ds, out); proc import datafile = "파일패스\&ds..txt" dbms = dlm/* specifies the type of data to import dlm : 구분자가 있는 파일 (디폴트 구분자는 빈칸) */ out = $out. replace;/* overwrites an existing SAS data set */ getnames = yes; /* 불러오는 파일 안의 첫 줄의 변수명을 가져올 것인지 */ guessingrows = max; delimiter..

[SAS] PROC DATASETS

PROC DATASETS : SAS files들을 관리 다양한 기능이 있지만, 특히 많이 사용하는 경우는 특정 라이브러리의 데이터셋을 삭제하는 경우 - DELETE : 특정 라이브러의 데이터셋들을 삭제하는 경우 - SAVE : SAVE문 뒤에 적어준 데이터셋을 제외하고 특정 라이브러리의 모든 데이터셋을 DELETE문으로 지울 때 proc datasets lib="libname"; DELETE 삭제할데이터셋명; SAVE 저장할데이터셋명; quit; PROC DATASETS lib=work kill; run; /* work 라이브러리의 데이터를 전부 삭제 */ 그 외 상세한 기능은 하단의 공식 사이트 참고 https://documentation.sas.com/doc/en/pgmsascdc/9.4_3.5/pr..

[SAS] MACRO ① : Macro 사용 목적과 기능

MACRO 문 SAS에는 for과 같은 반복문이 존재하지 않는다. do; end; 문이 존재하지만 기본 루프형이기 때문에 심플한 행단위의 처리에 적합하다. 그 대안으로 많이 사용되는게 MACRO구문이다. 즉, 코드의 반복적인 섹션을 방지하고 필요할 때 반복해서 사용할 수 있도록 해주는 것. 예를 들어 2017년부터 2019년까지 3년간의 회계 데이터가 있다. 데이터 가공처리 방법은 똑같고 해당 데이터의 연도만 다르다고 하자. (예) sample_bspl_2017, sample_bspl_2018, sample_bspl_2019 이 안의 각종 복잡한 포맷변환, 결측치 처리 등의 데이터 가공처리를 매 파일 마다 각각 적어주기는 너무나도 번거롭다. 3개면 몰라도 이런 파일이 10개, 20개가 된다고하면 복사 붙..

[SAS] 단일 IF

단일 If = Subsetting If 조건이 참이면 현재 실행을 계속하고(implicit output 문장 포함), 거짓이면 해당 obs에 대해 더 이상 다른 문장을 실행하지 않고 (삭제drop하고) 즉시 DATA step의 처음으로 돌아간다. (관측 값을 PDV(Program Data Vector)로 읽은 후 조건을 테스트한다) If without then is a subsetting statement, and all records not satisfying the condition are dropped. "Continues processing only those observations that meet the condition of the specified expression" IF AGE="10"..

[SAS] PUT, INPUT

숫자형 -> 문자형 : PUT PUT(source, 숫자형format) 문자형 -> 숫자형 : INPUT INPUT(source, 숫자형informat) proc format; value GENDERF 1="남성" 2="여성"; /* GENDERF라는 새로운 포맷 생성*/ run; data _PUT_INPUT; input GENDER1 DATE1 $9.; /* GENDER1(숫자형), DATE1(9자리의 문자형)*/ GENDER2 = put(GENDER1, GENDERF.); /* 숫자형 GENDER1 -> 문자형GENDERF 형식으로 */ DATE2 = input(DATE1, DATE9.);/* DATE1이라는 문자를 DATE9.(9자리 DDMMMYYYY)으로 변경 */ cards; 1 14MAR201..

[SAS] 레코드, 행의 수 세기

전체 SAS obs 개수, 데이터 레코드(=행)의 개수 세기 : PROC SQL 이용 데이터 프로시저 PROC DATA로도 가능하지만 PROC SQL을 이용하는편이 훨씬 간단하다. 전체 데이터 정보를 보기 위한 PROC CONTENTS로도 확인가능하다! PROC SQL; CREATE TABLE count AS SELECT COUNT(*) AS cnt FROM test; QUIT; DATA count (KEEP = cnt); /* KEEP= : 변수cnt만을 데이터셋으로 보존 */ * 데이터 세트 "test"를 불러온다; SET test END = last; /* END = : 지막 obs를 읽어들일 때의 동작 설정 */ * RETAIN 문은 이전 obs 변수의 cnt 값을 유지; RETAIN cnt 0;..