시계열 문제를 해결하기 위해서 분석(analysis), 분해(decomposition), 예측(forecasting), 모니터링(monitoring)과 데이터 마이닝(data minig)을 사용합니다.
시계열 분석을 위해서 SAS에서는 TSMODEL procedure을 제공합니다.
TSMODEL 은 cloud 환경인 SAS Visual Forecasting 과 SAS Economics 소프트웨어에서 제공하고 있습니다. TSMODEL은 자동 모델 생성뿐 아니라 automatic 변수 선택, automatic event selection, automatic model selection 과 parameter optimization을 할 수 있습니다.
또한, PTOC TSMODEL 은 오픈 소스인 R과 Python 연동이 가능합니다.
이 게시글은 오픈소스와 SAS software의 연동 방법을 시계열 분석 방법인 TSMODEL 을 사용해서 알아보려고 합니다.
시계열 예측 문제는 SAS Visual Forescating 소프트웨어에서 procedures, script, package 등 다양한 방법들을 사용해서 해결 할 수 있습니다.
SAS Viya에서는 TSMODEL procedure을 사용자들이 편리하게 사용할 수 있게 만들어 놓았습니다 .
PROC TSMODEL 분석은 timestamped data로 시간대별로 분석할 수 있게 세팅된 데이터와 시간대별로 축적된 데이터를 사용한다.
그래서 시계열 분석을 위해서는 fixed-time intervals 로 고정된 시간간격이 정해져 있어야 한다. 예를 들어 daily, weekly 또는 monthly 같이 시간 간격이 동일해야 한다.
TSMODEL procedure을 SAS에서 수행하기 위해서는 앞서 말했듯이 다양한 방법이 존재한다고 서술하였습니다.
그 중 다양한 패키지에서 TSMODEL procedure을 사용하는 방법에 대해 알아보겠습니다.
패키지는 전문화된 function을 의미합니다.
아래는 PROC TSMODEL 을 사용할 수 있는 패키지들에 대한 설명입니다.
이 문제를 해결함으로써, SAS Script에 Python 코드를 사용해서 간단한 moving average를 계산하는 방법에 대해서 알아보겠습니다.
EXTLANG 패키지를 사용하여 간단한 움직이는 평균을 구해보려 합니다.
SASHELP에 있는 pricedata를 사용하여 값을 다시 SAS Program으로 돌려주는 문제입니다.
1,020개의 데이터 세트로 월별 판매량을 나타내는 데이터로 날짜, region, 가격 등으로 28개의 칼럼으로 구성되어 있습니다. 그 중 가격변수는 17개로 price1, price2, ... , price17개가 있습니다.
PROC TSMODEL 을 사용하여 17개의 price 변수는 CAS 클러스터의 각 작업자에 있는 별도의 스레드에서 병렬로 처리됩니다.
첫번째, cas에 연결합니다.
CAS mycas;
LIBNAME mycas CAS SESSREF = mycas;
CAS는 MYCAS라고 불리는 Library로 호출할 수 있습니다. mycas library는 data sets를 cas node에 연결해 주기도 해서 time series 분석을 하기에 적합한 library입니다.
두번째, sashelp에 있는 price data 를 CAS mycas library에 transfer해 줍니다.
DATA mycas.pricedata;
SET sashelp.pricedata;
RUN;
PROC TSMODEL 은 input dat set (mycas.pricedata), output table (mycas.outarry), 출력 데이터 배열(mycas)을 저장할 출력 테이블(mycas.outarry), 스칼라 변수를 저장할 출력 테이블(mycas.outscalar), 출력 객체를 저장할 출력 테이블(mycas.pylog)를 설정해야 합니다.
PROC TSMODEL DATA=mycas.pricedata
OUTARRAY=mycas.outarray
OUTSCALAR=mycas.outscalar
OUTOBJ=(pylog=mycas.pylog);
ID 문은 변수 날짜를 시간 인덱스 변수로 지정하고, INTERVAL= 옵션은 데이터가 월 단위임을 나타냅니다.
ID date INTERVAL = MONTH;
BY statement은 데이터 세트 변수 중 regionname, productionline, productionname들의 조합을 위해서 시계열 BY에 지정합니다. BY 그룹은 독립적으로 처리됩니다.
BY regionname productline productname;
VAR statement는 입력 데이터 집합 변수 SALE을 지정합니다. ACUMULATE=AVG 옵션은 SALE 변수의 평균 값 누적을 지정합니다.
VAR SALE / ACCUMULATE = AVG;
OUTSCALAR 문은 SAS 스크립트가 생성하고 저장할 스칼라 변수를 지정합니다. 여기에는 파이썬 프로그램의 실행 시간(런타임)을 저장할 변수, 종료 코드를 저장할 변수(exitCode), 각 파이썬 2 개체의 메서드 호출에서 반환 코드를 저장할 변수(rc1–rc6)가 포함됩니다.
OUTSCALAR runtime exitCode rc1 rc2 rc3 rc4 rc5 rc6;
OUTARRAY 문은 프로그램이 생성하고 저장할 배열 변수를 지정합니다.
유일한 출력 배열은 이동 평균(MAVG)입니다.
OUTARRAY MAVG;
RECURE 문은 외부 언어와 상호 작용하기 위해 PROCSMODEL이 필요로 하는 모든 객체를 포함하는 EXTLANG 패키지를 지정합니다.
REQUIRE EXTLANG;
SUMBIT 문과 ENDSUBMIT 문 사이의 프로그램 문은 ATSM 패키지 개체를 사용하여 CAS 서버에서 실제 분석을 수행합니다.
SUBMIT;
/*
* Initialize the PYTHON2 object, which is the interface to the
* Python interpreter.
*/ declare object py(PYTHON2);
rc = py.Initialize();
/*
* Create the Python program, which simply does the following:
* 1. Import the NumPy package with alias np
* 2. Create an array to be used for the moving average computation,
* with a window size of 3
* 3. Compute the moving average and store into variable MAVG
*/ rc1 = py.PushCodeLine('import numpy as np');
rc2 = py.PushCodeLine('w = np.ones((3,))/3 ; ');
rc3 = py.PushCodeLine('MAVG = np.convolve(SALE, w, mode="same")');
/*
* Specify variables to share between SAS and Python.
* The variable SALE is used only as input in the Python program;
* the default value of READONLY is used to avoid propagating
* its data back to SAS. MAVG is transferred back to SAS, where
* it is stored in a CAS table for further analysis.
*/
rc4 = py.AddVariable(SALE) ;
rc5 = py.AddVariable(MAVG, 'READONLY', 'FALSE');
/*
* Run the program and obtain the run time and exit code.
*/
rc6 = py.Run();
runtime = py.GetRuntime();
exitCode = py.GetExitCode() ;
/*
* Store the execution and resource usage statistics logs.
*/
declare object pylog(OUTEXTLOG);
rc = pylog.Collect(py,'ALL');
ENDSUBMIT;
RUN;
TSMODEL procedure는 아래 결과표에서 수행되는 시계열 처리 요약을 인쇄합니다. 처리되는 BY 그룹 수, 총 처리 시간 및 누적 프로세스에 대한 일부 정보가 포함됩니다.
스칼라 출력의 하위 집합을 보여줍니다.
PROC PRINT DATA=mycas.outscalar; RUN;
OUTARRAY 테이블의 처음 10줄을 보여줍니다. 마지막 열에서 이동 평균 값(MAVG)을 볼 수 있습니다. 값은 컨볼루션 모드가 "same"으로 설정된 이후 경계에서 가져옵니다.
PROC PRINT DATA=mycas.outarray; RUN;
Catch the best of SAS Innovate 2025 — anytime, anywhere. Stream powerful keynotes, real-world demos, and game-changing insights from the world’s leading data and AI minds.