2014-06-05 4 views
0

rannor 함수를 사용하여 pseudonormal random 변수 각각에 대해 25 개의 관측치를 100 개 샘플로 생성하려고합니다. 여기에서 100 = 샘플 수, 25 = 샘플 크기입니다.SAS의 중첩 된 루프

%macro bootstrap(bootsample, sample, samplesize); 
    data &bootsample; 
    %do i=1 %to &sample; 
    do j=1 to &samplesize; 
    obsnumber=ceil(&samplesize*rannor(642014)); 
    output; 
    end; 
    proc univariate data=&bootsample normal; 
    ods output TestsForNormality=tests; 
    var obsnumber; 
    histogram obsnumber; 
    run; 
    %end; 
    run; 
    %mend; 

%bootstrap(bootsample,100,25); 

그러나 오류가 계속 발생합니다. 정책이 잘못되었거나 올바른 순서대로 사용되지 않았습니다. 어디서 잘못 됐습니까?

답변

3

그냥 첫째 %를 이동

%macro bootstrap(bootsample, sample, samplesize); 
     %do i=1 %to &sample; 
     data &bootsample; 
     do j=1 to &samplesize; 
     obsnumber=ceil(&samplesize*rannor(642014)); 
     output; 
     end; 
     proc univariate data=&bootsample normal; 
     ods output TestsForNormality=tests; 
     var obsnumber; 
     histogram obsnumber; 
     run; 
     %end; 
     run; 
     %mend; 

     %bootstrap(bootsample,100,25); 

또는

%MACRO BOOTSTRAP(SAMPLES=,SIZE=); 
data NormalBootstrap; 
    do sample=1 to &SAMPLES; 
     do size=1 to &SIZE; 
      value=rannor(642014); 
      output; 
     end; 
    end; 
run; 
%MEND; 
%BOOTSTRAP(SAMPLES=100,SIZE=25); 
proc univariate data=NormalBootstrap normal; 
     ods output TestsForNormality=tests; 
     var value; 
     by sample; 
     histogram value; 
run; 

(I 히스토그램 문없이 위의 코드를 제출 그래서 SAS 그래프가없는)

+0

# 2는있다 할 정답. # 1은 코딩/유지 보수가 매우 느리고 어렵습니다. 매크로는 전혀 필요하지 않습니다. (두 번째 옵션에 제시된대로) 원하거나 조직적으로 사용하는 것이 좋지만 재사용하지 않을 경우에는 필요하지 않습니다. – Joe