본문 바로가기
반응형

SAS/SAS Tip's23

[SAS] 그룹별 동일 항목으로 구성된 관측치 추출하기 [SAS] 그룹별 동일 항목으로 구성된 관측치 추출하기 * 질문 항목 : https://cafe.daum.net/statsas/B3m/15505 Daum 카페 cafe.daum.net SAS Programming DATA BACK; INPUT id item $; CARDS; 1 a 1 b 1 c 1 d 2 a 2 a 2 a 2 a 3 a 3 b 3 a 3 b 4 a 4 c 4 a 4 c 5 b 5 b 6 b 6 b 6 b 6 b 7 a 7 a 7 a 7 a ; 방법1 : ID를 기준으로 item 변수를 정렬하여서 ID별로 최종 값이 'a' 인 경우에 해당하는 관측치 선택하여 원본(back)에서 해당 관측치 선택; SAS Programming PROC SORT DATA=BACK; BY id item; RU.. 2022. 12. 28.
[IML] 관측치 행단위 기준으로 최빈값(Mode) 구하기 * Mode 함수를 제공하지 않는 관계로 일반적으로는 배열, Hash Object, 전치 후 통계 프로시져 등의 방법으로 최빈값을 구할 수 있고, 아래는 Proc iml의 freq함수와 level함수를 사용하여서 행 단위의 최빈값 계산하여 원 데이터에 결합하는 방식으로 구현. * 질문 : https://cafe.daum.net/statsas/B3m/15467 * [엑셀과 SAS함수] MODE 함수 : https://statwith.tistory.com/2433 data have; infile cards expandtabs; input Chrom Pos ID1 ID2 ID3 ID4 ID5 ID6 ID7 ID8; cards; 1 8456 0 0 0 0 0 . 1 1 1 9948 0 0 2 . 1 2 2 2 .. 2022. 10. 5.
[DB 로딩 에러 방지] 오라클 DB 건수 체크 후 데이터 로딩 [DB 로딩 에러 방지] 오라클 DB 건수 체크 후 데이터 로딩 데이터 건수가 10건 이상인 경우 DB 데이터 Delete 작업 및 Proc Append 데이터 로딩 작업을 진행한다. * 로딩 대상 테이블 건수 체크 후 nobs 매크로 변수 생성; PROC SQL noprint; SELECT count(*) INTO : nobs3 FROM 로딩SAS테이블명; QUIT; %put nobs=&nobs3; %macro BACK; %IF &NOBS3 > 10 %THEN %DO; PROC SQL; CONNECT TO ORACLE(USER="DB사용자계정" PASSWORD="DB패스워드" PATH="DB_PATH"); %PUT &SQLXMSG; EXECUTE ( DELETE FROM DB테이블명 ) BY ORACL.. 2021. 12. 3.
[데이터 결합] Data Step에서의 카테시안 곱(Cartesian product) 구현하기 [데이터 결합] Data Step에서의 카테시안 곱(Cartesian product) 구현하기 교차 조인 (Cross Join) 은 말 그대로 두 개의 테이블을 그냥 붙였다는 개념이다. 아무런 조건이나 제한 사항 없이 양쪽은 있는 그대로 연결만 했다는 개념으로 생각을 하면 되겠다. 쉽게 2개 기준 테이블에 존재하는 전체 관측치를 교차하여 결합하는 방식으로 생각해도 큰 무리가 없다. Cartesian product 카테시안 곱은 두 개 이상의 기준 테이블에 대해 연결 가능한 행을 모두 결합하는 조인 방식. WHERE절에서 조인 조건절을 생략하거나 조인 조건을 잘못 설정하여 양쪽 테이블을 연결하는 조건을 만족하는 행이 하나도 없는 경우에 자주 발생한다. 카테시안 곱이 발생하면 각 테이블의 행의 수를 곱한 만.. 2021. 11. 16.
[변수출력] 다양한 변수 리스트 출력 방식; [변수출력] 다양한 변수 리스트 출력 방식; * Proc SQL 구문의 feedback 옵션 Proc SQL 구문의 feedback 옵션은 SELECT * 에서 전체 변수(*)에 해당하는 모든 변수들을 LOG 화면에 출력.; SAS Statements proc sql feedback; select * from SASHELP.CLASS; run; Results (LOG 화면) select CLASS.Name, CLASS.Sex, CLASS.Age, CLASS.Height, CLASS.Weight from SASHELP.CLASS; * PROC CONTENTS 프로시져; SAS Statements PROC CONTENTS DATA=SASHELP.CLASS OUT=BACK POSITION; RUN; Resul.. 2021. 11. 15.
[자원관리] 라이브러리에서 임시(TEMP) 데이터 세트 지우기 [자원관리] 라이브러리에서 임시(TEMP) 데이터 세트 지우기 * 임시(TEMP) 데이터 세트 지우기; * SAS는 기본적으로 WORK 라이브러리에 작업 데이터를 저장하기 때문에 종료 전에는 중간 작업 결과 파일에 대하여 많은 디스크 용량을 차지하고 있다.; * 따라서 대용량 데이터 작업 시 디스크 공간 확보를 위해서 TEMP 데이터 세트 삭제 작업을 수행 할 수 있다.; * datasets 프로시져의 DELETE 구문을 프로그램 중간에 실행하여서 SAS 파일을 저장하기 위한 디스크의 공간을 확보할 수 있다.; SAS Program DATA BACK_1; VAR = 1; RUN; DATA BACK_2; VAR = 1; RUN; * 삭제 작업 결과에 대한 출력 제어를 위하여 NOPRINT 옵션을 지정한다... 2021. 11. 4.
문자열 앞에 공백(접두어)을 포함한 문자열을 LOG 및 FILE 출력하기 * 문자열 앞에 공백(접두어)을 포함한 문자열을 LOG 및 FILE 출력하기; * $CHAR 포맷을 사용하면 공백을 포함한 문자열 출력이 가능하다.; * 로그 창 출력하기; SAS Program data _null_; mytitle =" BACK!"; put mytitle; put mytitle $char8.; run; Results (LOG Windows) BACK! BACK! * 텍스트 파일 출력하기; SAS Program data _null_; FILE 'D:\BACK.txt'; mytitle =" BACK!"; put mytitle; put mytitle $char8.; run; Results (BACK.txt 파일) BACK! BACK! 2021. 11. 4.
Proc print 출력 결과를 ods를 사용하여서 텍스트 파일로 저장하기 ods를 사용하여서 Proc print 출력 결과를 텍스트 파일로 저장하기 SAS Program filename mytext "C://back.txt"; ods listing file=mytext; proc print data=sashelp.class; run; ods listing close; Results (back.txt 파일 내용) OBS Name Sex Age Height Weight 1 Alfred M 14 69.0 112.5 2 Alice F 13 56.5 84.0 3 Barbara F 13 65.3 98.0 4 Carol F 14 62.8 102.5 5 Henry M 14 63.5 102.5 6 James M 12 57.3 83.0 7 Jane F 12 59.8 84.5 8 Janet F .. 2021. 10. 30.
순열(Permutation)과 조합(Combination) 계산하기 * 순열과 조합 계산하기(Gamma 함수, Lgamama 함수, Perm/Cobm 함수); * n이 큰 경우 gamma 함수는 오버플로우 에러를 발생한다.; SAS Program data back; n=100; r=5; perm1 = gamma(n+1) /gamma(n-r+1); perm2 = exp(lgamma(n+1) -lgamma(n-r+1)); perm3 = perm(n,5); comb1 = gamma(n+1) /gamma(r+1) /gamma(n-r+1); comb2 = exp(lgamma(n+1) -lgamma(r+1) -lgamma(n-r+1)); comb3 = comb(n,r); run; Results OBS n r perm1 perm2 perm3 comb1 comb2 comb3 1 100.. 2021. 10. 30.
[변수 리스트] 테이블 변수 위치 기준으로 변수 리스트 출력하기 [변수 리스트] 테이블 변수 위치 기준으로 변수 리스트 출력하기 /* 테이블 변수 위치별로 변수 리스트 출력하기 */ /* PROC CONTENTS 프로시져를 사용하여서 변수 리스트 정보(변수명, 변수타입, 변수길이, 변수 순서, 레이블 정보 등)를 출력 할 수 있다. 다른 방법으로 VIEWS 테이블을 사용하여 변수 리스트를 출력 할 수 있다. */ SAS Program PROC CONTENTS DATA = SASHELP.CLASS OUT = BACK NOPRINT; RUN; PROC SORT DATA=BACK; BY VARNUM; RUN; PROC PRINT DATA=BACK; RUN; Results M I L M E T F F N I I I E M Y L V F O O F N N E C B M L P.. 2021. 10. 30.
[SAS 운영환경] SAS 시스템 최소 요구 사항 [SAS 운영환경] SAS 시스템 최소 요구 사항 다음 페이지에서 시스템 요구사항을 참조하시면 됩니다. 만약 대용량 데이터 처리가 아닌 학습용으로 SAS를 하신다면 SAS 클라우드에서 제공하는 SAS OnDemand for Academics 를 무료로 사용하시는 것도 좋은 방법이 될 듯 싶습니다. (간혹 시스템 접근 장애가 있다고 하니 참고하시기를 바랍니다.) * RESOURCES / SYSTEM REQUIREMENTS : https://support.sas.com/supportos/list * System Requirements for SAS® 9.4 Foundation for Microsoft Windows for x64 : https://support.sas.com/documentation/inst.. 2021. 10. 15.
[파일 Import] 외부 파일 로딩 후 SAS에서 변수명 변경하기 [파일 Import] 외부 파일 로딩 후 SAS에서 변수명 변경하기 * Import 하기 위한 테스트 데이터 생성; SAS Programming proc export data = sashelp.class (where=(sex='여')) outfile = "F:\BACK_TEXT.csv" dbms = csv replace; run; * 방법 1 : 데이터 IMPORT 후 RENAME 구문으로 변수명 변경; SAS Programming proc import datafile = "F:\BACK_TEXT.csv" out = back_1 dbms = csv replace; getnames=yes; run; DATA BACK_RENAME; SET BACK_1; RENAME NAME=CUST_NM SEX=GENDER.. 2021. 10. 15.
반응형