통계 그래픽을 만들기 위해서는 데이터를 이해하고 표현하는 것이 매우 중요합니다.
데이터를 한 눈에 파악하기 위해서는 플롯을 통해서 데이터를 파악할 수 있습니다.
난수발생 방법과 Plot 작성법을 알아보겠습니다.
DO Loop는 새로운 데이터를 생성하는 가장 쉬운 방법입니다.
DO 루프는 DATA 단계 내에서 새 데이터 테이블을 생성하거나 반복하는 데 사용됩니다.
반복되는 Loop Iterations은 테이블의 행 차원을 정의하고 변수의 수는 다음을 정의합니다.
# SAS
DO index-variable=start TO stop <BY increment>;
END;
예시를 들어 알아보겠습니다.
do i=1 to 5;
end;
i는 시작값 1로 설정합니다.
키워드 TO 를 사용하여 마지막 값을 지정합니다(이 경우는 5).
그렇게 i=1부터 5까지 숫자를 생성합니다.
항상 END 문을 사용하여 DO 루프를 종료할 수 있습니다.
다음은 2개의 DO Loop의 예시입니다.
Ex1)
do i=2 to 10 by 2;
end;
첫 번째 Do문에서는 BY문 옵션을 추가한 것 입니다.
i=2에서 10까지 2만큼 증가합니다. 그래서 2, 4, 6, 8,10 숫자를 생성합니다.
Ex2)
do i=10 to 2 by -2;
end;
두 번째 루프에 나와 있는 것처럼 방향을 바꿀 수 있습니다.
숫자는 10부터 시작하여 2까지 -2만큼 줄어들게 숫자를 생성합니다. 그래서 10,8, 6, 4, 2 숫자가 생성됩니다.
DATA 단계와 DO LOOP를 사용하여 새 SAS 데이터 세트를 생성할 수 있습니다.
BY 문을 생략하면 DO 루프가 1만큼 반복됩니다.
# SAS - Data Step and Do Loop Syntax
DATA data-table-name-new;
DO index-variable=start TO stop <BY increment>;
iterated-SAS-statements;
OUTPUT;
END;
RUN;
data loop;
do i=2 to 10 by 2;
x = i+1;
rep = 1;
output;
end;
run;
결과
DO 루프 반복 횟수는 OUTPUT 문을 사용할 때 데이터 테이블에 기록되는 관찰 횟수를 결정합니다.
2에서 10까지 2만큼 증가합니다.
모든 반복 값을 데이터 세트 루프에 실제로 출력하려면 OUTPUT 문을 사용해야 합니다.
OUTPUT 문을 쓰지 않으면 첫번째 숫자만 생성됩니다.
그리고 다시 END 문으로 DO 루프문을 종료합니다.
자세히 설명하면 루프 내에서 새로운 변수 x를 만들었습니다.
x가 인덱스 변수 i에 1을 더하여 새로운 변수 rep를 생성하고 있습니다. Loop 데이터 세트의 PROC PRINT를 보여주는 인덱스 변수 i는 2에서 10, x는 3에서 11, rep는 1로 결과가 나타납니다.
데이터 세트에 인덱스 변수를 유지하지 않으려면 두 가지 옵션이 있습니다. DATA 문에서 KEEP= 또는 DROP= 옵션을 지정할 수 있습니다.
# SAS - Do Loop : KEEP = Option
keep 옵션은 특정변수만을 남기고 데이터셋 생성합니다.
data loop (keep=x rep);
do i=2 to 10 by 2;
x = i+1;
rep = 1;
output;
end;
run;
# SAS - Do Loop : Drop = Option
DROP= 옵션을 사용하여 SAS에 인덱스 변수 i를 삭제하도록 지시할 수 있습니다.
data loop (drop=i);
do i=2 to 10 by 2;
x = i+1;
rep = 1;
output;
end;
run;
Nested DO Loop는 R 의 REP Function 기능과 유사합니다.
Rep Function은 값을 반복할 수 있습니다. 그리고 또 중첩된 FOR 루프와 유사합니다. 중첩된 DO 루프를 사용하여 이전 DO 루프 변수를 복제할 수 있습니다.
# R Rep Function
rep(1:2, each=2)
rep(1:2, 2)
# SAS: Nested Do Loop
do i=1 to 2;
do j=1 to 2;
output;
end;
end;
Result
i가 1에서 2까지 중첩된 DO 루프를 보여줍니다. 중첩된 루프는 j는 1에서 2입니다.
다시 설명하면, 반복 i에서 값 1로 시작하여 j, 1 및 2를 통해 반복합니다. 그런 다음 i에 대해 2의 값으로 이동하여 j, 1 및 2를 통해 다시 반복합니다. 이것은 R의 FOR 루프와 동일합니다.
# SAS - Create Data Set
data doloop;
do i=1 to 2;
output;
end;
run;
중첩 DO 루프를 수행하는 다른 방법이 있습니다. 기존 데이터 테이블에 DO 루프를 적용하면 중첩된 DO 루프와 동일한 효과가 있습니다. 순차적 DATA 단계에서 여러 DO 루프를 사용할 수 있습니다. i가 1에서 2로 가고 두 값을 데이터 테이블에 씁니다.
# SAS - Apply Do Loop to Existing Data Set
data doloop;
set doloop;
do j=1 to 2;
output;
end;
run;
위의 예제에서 DO 루프는 해당 데이터 세트의 모든 관찰을 반복합니다. 인덱스 변수 i에 대해 1과 2의 값을 반복합니다.
SUM 문은 새 변수를 만듭니다.
변수는 자동으로 0으로 초기화되고 DATA 스텝의 반복에서 다음 단계로 값이 유지됩니다. 반복할 때마다 새 변수는 시퀀스 값만큼 증가합니다.
SUM 문은 데이터 테이블에 시퀀스를 추가할 때 유용합니다. SUM 문을 추가하려면 다음 구문을 사용합니다.
new-variable-name + sequence-value;
SUM 스테이트먼트는 seq를 호출합니다. 데이터 집합의 변수 이름이 됩니다. 시퀀스 값 1을 지정합니다.
seq + 1 입니다. DATA 스텝을 시작하면 0으로 초기화됩니다. 첫 번째 반복에서는 값이 0 더하기 1이 됩니다. OUTPUT 문을 사용하여 값을 데이터 테이블에 씁니다. 다음 반복에서는 seq 값이 2, 3 등입니다. 기본적으로 SUM 문을 사용하여 기존 SAS 데이터 세트에 시퀀스를 추가합니다.
data doloop;
do i=1 to 2;
do j=1 to 2;
seq + 1;
output;
end;
end;
run;
Result
DO Loop 를 통해 난수 수를 지정할 수 있습니다. DO 루프는 데이터 테이블을 동시에 생성하고 새로운 SAS 데이터 세트를 생성할 수 있도록 난수를 생성하는 데 사용됩니다.
RAND Function
DO 루프 내에서 RAND 함수를 사용합니다. 새 SAS 데이터 세트를 생성합니다.
무작위 확률 분포에서 샘플링하기 위해 RAND 함수를 사용합니다.
RAND 기능은 매우 R 함수와 유사합니다.
# Comparing R and SAS
RAND 함수의 첫 번째 인수는 분포의 이름입니다. 그리고 따옴표로 묶어야 합니다.
다음 인수 집합은 다음 구문에 표시된 대로 해당 특정 분포에 대한 매개변수입니다.
모든 확률 분포가 SAS에서와 같은 R에서 동일하지는 않습니다.
예를 들어 지수 분포에는 실제로 평균이나 비율 모수가 없습니다.
분포에 평균을 곱하여 등가값을 구합니다. SAS의 균일한 분포는 시뮬레이션만 합니다.
0과 1 사이의 값은 0 ~1 입니다. 예를 들어, 0과 10 사이의 분포를 원하는 경우 단순하게
모든 시뮬레이션 값에 10을 곱합니다.
# Rand Function in DO Loop
data random (drop=i); /*1*/
call streaminit(123); /*2*/
do i=1 to 3;
x = rand('Normal',10,2); /*3*/
output; /*4*/
end;
run;
1. Index variable i 를 생성합니다.
2. STREAMINIT subroutine을 통해서 seed 123으로 지정합니다.
3. 그런 다음 i가 1~3인 DO 루프를 사용하여 RAND 함수와 동일한 새 변수 x를 만듭니다. 평균이 10이고 표준 편차가 2인 정규 분포 데이터 집합입니다.
4. OUTPUT 문을 통해서 data table을 기록합니다.
# Other Probability Functions
난수를 생성할 때 PDF, CDF 및 QUANTILE 함수를 사용할 수 있습니다. SAS에서 R에서와 똑같은 방식으로 작동합니다.
아래의 표느를 통해서 PDF, CDF, QUANTILE 함수를 사용하여 dnorm, pnorm, qnorm 함수를 복제하는 방법의 예를 살펴보겠습니다.
위의 테이블에서 볼 수 있듯이 분포의 이름을 지정합니다. 그런 다음 PDF 및 CDF 함수에 대한 분위수 또는 QUANTILE 함수에 대한 누적 분포를 제공합니다.
마지막 두 인수는 분포에 대한 매개변수입니다.
Join us for SAS Innovate 2025, our biggest and most exciting global event of the year, in Orlando, FL, from May 6-9.
Early bird rate extended! Save $200 when you sign up by March 31.