SAS中的嵌套do循环

SAS中的嵌套do循环,sas,Sas,我想用rannor函数生成100个25个观测值的样本,每个样本都是伪正态随机变量。这里,100=样本,25=样本量 %macro bootstrap(bootsample, sample, samplesize); data &bootsample; %do i=1 %to &sample; do j=1 to &samplesize; obsnumber=ceil(&samplesize*rannor(642014)); o

我想用rannor函数生成100个25个观测值的样本,每个样本都是伪正态随机变量。这里,100=样本,25=样本量

%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);
但我不断收到错误:语句无效或使用顺序不当。
我哪里出错了?

只需移动第一个%do

%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);


(我没有sas图形,因此我提交了上面没有直方图语句的代码)

只需移动第一个%do

%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);


(我没有sas图形,因此我提交了上面没有直方图语句的代码)

只需移动第一个%do

%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);


(我没有sas图形,因此我提交了上面没有直方图语句的代码)

只需移动第一个%do

%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);

(我没有sas图形,因此我提交了上面的代码,但没有直方图语句)

#2是正确答案#1的速度非常慢,而且更难编码/维护。根本不需要宏-如果您想要宏(如第二个选项中所示)或出于组织目的更喜欢宏,则可以使用宏,但如果您不打算重用宏,则无需使用宏。#2是正确答案#1的速度非常慢,而且更难编码/维护。根本不需要宏-如果您想要宏(如第二个选项中所示)或出于组织目的更喜欢宏,则可以使用宏,但如果您不打算重用宏,则无需使用宏。#2是正确答案#1的速度非常慢,而且更难编码/维护。根本不需要宏-如果您想要宏(如第二个选项中所示)或出于组织目的更喜欢宏,则可以使用宏,但如果您不打算重用宏,则无需使用宏。#2是正确答案#1的速度非常慢,而且更难编码/维护。根本不需要宏-如果您想要宏(如第二个选项中所示)或出于组织目的更喜欢宏,则可以使用宏,但如果您不打算重用宏,则不需要宏。