BookmarkSubscribeRSS Feed

[SAS 활용 노하우] Interactive Matrix Language(IML)

Started ‎05-29-2022 by
Modified ‎05-29-2022 by
Views 781

 

 

The Basic of IML

대화형 매트릭스 언어로 작업하는 기본 사항에 대해 살펴보겠습니다.

예를 들어, 아래 방정식에 가정된 모델이 있습니다.

 

image (1).png

 

 

PROCREG 또는 PROC GLM에 전달할 수 있습니다. 대신, 이 장에서는 모든 행렬을 수행할 것입니다.

대수학에서 모수 추정치를 찾을 수 있습니다. 아래 방정식에서, 베타 해트 벡터는 x 전치 x 역치, x이다.

transposey, 여기서 x는 설계 행렬이고 y는 관측치의 벡터입니다.

 

 

image (2).png

 

 

 

PROC IML

PROC IML은 행렬을 수동으로 만듭니다. 원소별 연산, 매트릭스 연산을 해보겠습니다.

행렬의 요소에 액세스하여 끌어내고 마지막으로 몇 가지 축소 연산자에 대해 설명하여 MAX, SUM, COLMEANS와 같은 기본 함수를 사용하는 방법에 대해 알아보겠습니다.

 

 

PROC IML;
  IML syntax
QUIT;

 

먼저 PROCIML 문장으로 시작하고 모든 IML 구문을 사용합니다. 이건 정말 많을 수도 있고 여러 줄의 암호 대화형 매트릭스 언어 작업이 끝나면 단일 QUIT를 실행합니다.

PROCIML과 QUIT 사이의 모든 것이 매트릭스가 될 것입니다.

PROC IML은 대화형 또는 배치 모드에서 사용될 수 있습니다. 배치 모드에서 IML을 사용하려면 PROC를 제출해야 합니다. IML 호출, IML 문 세트, 마지막으로 QUIT 문. PROCIML에는 RUN 문이 필요하지 않습니다.

대화형 모드에서 IML을 사용하려면 PROCIML 호출을 제출합니다. 그런 다음 한 번에 하나씩 IML 문을 제출할 수 있습니다.

시간 또는 그룹 단위로. IML이 더 이상 필요하지 않으면 QUIT 문을 제출하여 IML을 종료합니다.

행렬을 직접 생성하려면 아래와 같이 행렬을 지정하기만 하면 됩니다. 그것을 x라고 부르고 다음과 같게 설정하십시오.

대괄호를 사용하여 다음을 수행합니다. 행렬의 첫 번째 행(1, 2, 3)을 지정한 다음 쉼표를 사용하여

행렬의 두 번째 행(4, 5, 6). 이제 x는 2x3 행렬입니다.

 

PROC IML;
x = {1 2 3,
4 5 6}
QUIT;

 

문자 데이터도 입력할 수 있습니다. 아래는 3-by-1인 벡터를 예제 프로그램입니다.

 

 

PROC IML;
x = {“Jordan”,
“Baker”,
“Man}
QUIT;

SAS/IML 행렬에는 문자 또는 숫자 요소가 포함되어야 합니다. 행렬은 다음 두 가지 유형을 모두 포함할 수 없습니다.

숫자 요소는 8바이트를 사용하여 이중 정밀 부동 소수점 형식으로 저장됩니다. 요소들의 문자 행렬의 길이는 1 ~ 32,767바이트입니다. 이름 문자 또는 밑줄로 시작하여 다음 중 하나로 계속하여 1 ~ 32자까지 입력할 수 있습니다. 문자, 밑줄 또는 숫자의 조합입니다.

행렬에 문자 값을 할당한 다음 요소를 할당하는 경우 값 2는 에 포함되지 않습니다.

따옴표, 요소에 2의 부동 소수점 숫자 표현이 아닌 '2' 문자가 포함되어 있습니다.

행렬은 혼합 형식이 될 수 없기 때문입니다.

문자 행렬에서 각 요소의 길이는 가장 긴 길이의 것으로 동적으로 결정됩니다.

원소의 예를 들어 값 도그를 행렬의 원소 1에 할당하고 값 말을 원소 2에 할당하면 첫 번째 요소는 5바이트 길이이고 마지막 두 바이트는 공백 문자입니다. 나중에 변경할 경우 요소 2에서 고양이로, 더 긴 요소가 할당되지 않는 한 요소의 길이는 5로 남습니다. 길이 문장은 문자 행렬의 각 요소의 길이를 결정하는 데 사용될 수 있습니다.

 

PROC IML;
x = {1 2 3,
4 5 6}
print x;
QUIT;

 

PRINT 문을 사용하여 output을 볼 수 있습니다.

다른 방법으로는 PRINT 문을 사용할 수 있습니다.

 

print ( {1 2 3,
4 5 6});

 

 

Creating a Sequence

SAS의 인덱스 연산자는 다음 구문과 같이 R과 동일합니다.

 

value1:value2;

 

아래의 예시는 콜론을 사용하여 1에서 5까지의 시퀀스를 생성하고 단순히 행 벡터를 생성합니다.

 

vector = DO(start,stop,increment);
X = do(2, 10, 2);

 

2부터 10까지 2씩 [2 4 6 8 10] 을 생성할 수 있습니다.

 

 

 

 

Modules and Subroutines

# R

 

 image (3).png

 

 

Function

함수는 할당 문을 사용합니다. IML 함수는 할당 문이 없으면 유효하지 않습니다. 새 변수 이름(이 경우 결과)을 지정하고 함수와 동일하게 설정해야 합니다.

함수를 실제로 사용할 수 있도록 인수를 제공합니다.

2 x 3인 X 행렬이 있으며 NROW와 NCOLS 함수를 사용하고 있습니다.실제로 내장된 함수를 사용하기 위해, 우리는 그것을 우리가 호출하는 새로운 행렬과 동일하게 설정하고 있습니다.

 

 

X = {3 4 5,
2 4 9};
numberRows = nrow(X);
numberCols = ncols(X);

 

 

 

Subroutine

서브루틴 모듈은 행렬을 반환하지 않습니다. 서브루틴은 매트릭스를 생성하거나 변경합니다.

인수가 없으며 할당 문에서 호출할 수 없으므로 새 값과 동일하게 설정할 수 없습니다.

변하기 쉬운. 아래 예에서는 SORT 서브루틴을 사용하고 CALL 문으로 호출합니다.

 

 

call sort(X);

 

단일 인수 X를 제공하고 행렬 X를 다시 정렬합니다. 그래서 새로운 행렬은 [ 2 3 4 , 4 5 9 ]가 될 것입니다.

일부 하위 루틴은 할당 문 없이 행렬을 만듭니다.

 

CALL EIGEN (eigenvalues, eigenvectors, matrix);

 

 

IGEG 서브루틴은 다음 구문을 사용하여 행렬을 만듭니다.

고유값, 고유 벡터 및 행렬의 세 가지 인수가 있습니다.

2x2 행렬 x를 가지며, CALL 문을 사용하여 고유 서브루틴을 실행합니다.

그것을 하나의 인수 x기고 다른 두 인수인 eval과 evc는 생성되는 행렬입니다.

 

 

x = {1 2,3 4};
call eigen(evals,evecs,x);
print evals evecs;

 

고유값 분해를 할 때, 은 evals 행렬과 evcs 행렬을 생성합니다.

고유값 및 고유 벡터입니다. 그런 다음 서브루틴을 실행하면 SAS에서 서브루틴을 사용할 수 있습니다.

새로운 행렬, eval 및 evc를 인쇄한 결과를 보여줍니다.

Version history
Last update:
‎05-29-2022 09:48 AM
Updated by:
Contributors

SAS Innovate 2025: Register Now

Registration is now open for SAS Innovate 2025 , our biggest and most exciting global event of the year! Join us in Orlando, FL, May 6-9.
Sign up by Dec. 31 to get the 2024 rate of just $495.
Register now!

Article Labels
Article Tags