ERROR: Could not set WORK library path:
ERROR: C:\Users\<user>\AppData\Local\Temp\SAS Temporary Files.
ERROR: Unable to use WORK as the default value for the UTILLOC option.
ERROR: (SASXKINI): PHASE 3 KERNEL INITIALIZATION FAILED.
ERROR: Unable to initialize the SAS kernel.
SAS 가 임시 작업 디렉터리를 만들지 못해 기동 단계에서 죽은 것이다. 원인은 넷 중 하나다.
| 원인 | 조치 |
|---|---|
| Temp 폴더 권한 문제 또는 잔여 디렉터리 손상 | SAS 를 모두 닫고 %TEMP% 아래 SAS Temporary Files 폴더를 지운 뒤 다시 실행 |
TEMP · TMP 환경 변수가 유효하지 않다 |
echo %TEMP% 로 경로 존재와 쓰기 가능 여부 확인 |
| 디스크 공간 부족 | 해당 드라이브 여유 확보 |
| 사용자 폴더 이름에 한글이 들어 있다 | ASCII 경로를 -WORK 로 강제 지정 |
응급 조치는 ASCII 고정 경로를 지정하는 것이다.
"C:\Program Files\SASHome\SASFoundation\9.4\sas.exe" -WORK "C:\SASWORK"
바로가기 속성의 대상(T) 끝에 붙이거나, 구성 파일 끝에 추가한다.
-WORK "C:\SASWORK"
-UTILLOC 은 정렬·인덱스 생성에서 쓰는 임시 파일 위치이며 필수가 아니다. 지정하지 않으면 WORK 와 같은 위치를 쓴다. 용량 분산이나 성능 때문에 나눌 때만 따로 지정한다.
한국어와 영문 실행 파일은 서로 다른 구성 파일을 읽는다.
C:\Program Files\SASHome\SASFoundation\9.4\nls\ko\sasv9.cfg
C:\Program Files\SASHome\SASFoundation\9.4\nls\en\sasv9.cfg
두 구성 파일의 -WORK, -UTILLOC, -CONFIG 값이 다를 수 있다. 특히 !TEMP\SAS Temporary Files 처럼 환경 변수 확장과 공백이 섞인 경로는 사용자 폴더에 한글이 있거나 잔여 디렉터리·보안 정책이 걸리면 특정 실행 파일에서만 실패하기도 한다. 영문 쪽만 ASCII 고정 경로로 바꾸면 우회된다.
구성 파일은 Program Files 아래에 있어 일반 권한으로는 저장되지 않는다. 메모장을 관리자 권한으로 실행해서 열고, 파일 형식 필터를 모든 파일로 바꿔야 보인다. 관리자 권한이 없다면 바로가기 속성에 옵션을 붙이는 것으로 대신할 수 있다.
SAS 가 내부 JRE 를 초기화하지 못할 때 나오는 메시지다.
| 원인 | 조치 |
|---|---|
| SAS 번들 JRE 손상 또는 삭제 | SASHome\SASPrivateJavaRuntimeEnvironment\9.4\jre\bin\java.exe 존재 확인, 없으면 Deployment Manager 로 복구 |
외부 JAVA_HOME · PATH 가 먼저 잡힌다 |
SAS 는 자체 JRE 를 써야 한다. 외부 Java 를 뒤로 미루거나 제거 |
| 읽기 권한 부족 또는 백신 차단 | 해당 폴더를 허용 목록에 추가 |
| 설치 경로에 한글·특수문자 | ASCII 경로로 재설치 또는 복구 |
where java
$JRE="C:\Program Files\SASHome\SASPrivateJavaRuntimeEnvironment\9.4\jre\bin\java.exe"
if (Test-Path $JRE) { & $JRE -version } else { "SAS 번들 JRE 경로가 없습니다." }
구성 파일의 -SET SASROOT 가 실제 설치 경로와 일치하는지도 확인한다. 최종 조치는 SAS Deployment Manager 의 Repair 로 SAS Foundation 과 SAS Private Java Runtime Environment 를 함께 복구하는 것이다.
The SAS Windowing environment is not available. This version of SAS can be used with
SAS(r) Studio or in a batch environment.
설치된 구성에 GUI(Display Manager)가 포함되지 않았다는 뜻이다. 오류가 아니라 제약이다. SAS Studio 를 쓰거나 배치로 실행한다.
sas myprogram.sas
GUI 가 꼭 필요하면 설치 계획에 Display Manager 가 포함돼 있는지 확인하고 다시 설치해야 한다.
The argument to macro function %SYSGET is not defined as a system variable.
%SYSGET() 은 OS 환경 변수를 읽는다. 그 환경 변수가 없으면 오류가 난다.
echo $MYDIR # 리눅스
echo %MYDIR% # Windows
환경 변수는 SAS 세션이 시작되기 전에 설정돼 있어야 한다.
export MYDIR=/data
sas job.sas
%SYSGET 은 존재하지 않으면 무조건 오류를 내므로 %symexist 로 미리 걸러 낼 수 없다. 배치라면 실행 스크립트에서 환경 변수를 보장하고, 그것이 어려우면 -set 옵션으로 매크로 변수를 직접 넘기거나 %let 으로 값을 지정한다.
| 원인 | 확인·조치 |
|---|---|
| 라이선스에 없거나 만료 | proc setinit; run; proc product_status; run; |
| 공유 구성 요소 누락 | SAS PC Files Server 와 SAS Shared Components 설치 여부 확인 |
| 비트 수 불일치 | 64비트 SAS 와 32비트 Office 조합이면 Excel·Access 연결이 실패한다 |
리눅스에서 DBMS=EXCEL · ENGINE=PCFILES 사용 |
Windows 쪽 PC Files Server 가 필요하다. 기본 포트 9621 방화벽 허용 |
SAS 9.4 에는 XLSX 엔진이 있어 PC Files 없이도 엑셀을 읽고 쓸 수 있다. 가능하면 이쪽으로 바꾼다.
libname x xlsx "/path/file.xlsx";
proc contents data=x._all_; run;
libname x clear;
proc import datafile="/path/file.xlsx" dbms=xlsx out=work.t replace; run;
proc export data=work.t dbms=xlsx outfile="/path/out.xlsx" replace; run;
CSV·TXT 는 PC Files 가 필요 없다.
proc import datafile="/path/file.csv" dbms=csv out=work.t replace;
guessingrows=max;
run;